LINQ-to-SQL ve ADO.NET Entity Framework karşılaştırması

Womanne

Member
.NET 3.5 Service Pack 1’in yeni temel öğesi, bir yandan mevcut ADO.NET altyapısını kavramsal veri modellemenin soyutlama düzeyine yükselten, diğer yandan başka bir çözüm sunan ADO.NET Entity Framework’tür. nesne ilişkisel eşleyici (ORM). ADO.NET Entity Framework (sürüm 3.5 Service Pack 1’den başlayarak .NET’e dahil edilmiştir), .NET 3.5 ile ortaya çıkan LINQ’dan SQL’e ORM aracının gelişmiş hali değil, neredeyse tamamen farklı (yeni) bir araçtır. Başka bir geliştirme ekibinden gelen uygulama ürünü, onu LINQ-to-SQL ile paralel olarak geliştirdi ve artık Microsoft’ta müşteriler için dahili olarak rekabet ediyor. Varlık Çerçevesi daha önceki “Nesne Alanları” yaklaşımından ortaya çıktı.

ADO.NET Entity Framework, “Microsoft’ta Nesne-İlişkisel Haritalama”nın uzun tarihindeki bir başka (ilginç) bölümdür. Microsoft, SQL Server tabanlı WinFS dosya sisteminde Nesne Uzayları ve ORM konusunda başarısız oldu; bunun nedeni, kısmen Nesne Uzayları ve WinFS’nin çok benzer bir göreve iki farklı yaklaşım olmasıydı. LINQ’da (LINQ-to-SQL) Entity Framework ve ORM ile artık iki farklı yaklaşım var.

LINQ-to-SQL ve ADO.NET Entity Framework, ayrı geliştirme hatlarına rağmen bazı benzerliklere sahiptir. Her iki mimaride de bağlam (LINQ’dan SQL’e: “veri bağlamı”, EF: “nesne bağlamı”) .NET nesnelerini bir arada tutar ve LINQ sorguları için giriş noktası sağlar. Ancak LINQ-to-SQL, ilişkili LINQ lehçesi LINQ-to-Entities ile ADO.NET Entity Framework’ten genel olarak daha az seçenek sunar.

LINQ-to-SQL (LTS) ile ADO.NET Entity Framework (EF) arasındaki temel farklar şunlardır:


()

  • LINQ-to-SQL için geçerli olan kısıtlama, Microsoft’un Microsoft SQL Server için yalnızca bir sağlayıcı sağlaması ve arayüzleri açıklamayarak diğer satıcıların da sağlayıcı geliştirmesini engellemek istemesidir. Ancak Microsoft, .NET Entity Framework’ü diğer sağlayıcılara açmıştır, dolayısıyla diğer sağlayıcılar da burada mevcuttur.
  • LINQ-to-SQL, tablolar ve nesneler arasında (neredeyse) yalnızca 1:1 eşlemeyi destekler. Entity Framework isteğe bağlı eşlemeleri destekler.
  • LINQ-to-SQL, varlık-ilişki modellemesinde (ERM) kullanılan kavramsal model üzerinde değil, doğrudan veritabanı şeması üzerinde çalışır. Bu özellikle N:M eşlemelerinde açıktır: EF’de bu iki sınıfa eşlenebilir, LINQ-to-SQL’de üç (tablo kadar) ihtiyacınız vardır!
  • LINQ-to-SQL, sorgu dili olarak LINQ veya direct SQL’i sunar. EF, LINQ’ya ek olarak kavramsal düzeyde çalışan ancak yalnızca SELECT komutları sunan, veritabanından bağımsız bir SQL lehçesi olan Entity SQL’i (eSQL) sunar.
  • LINQ-to-SQL, yalnızca ayırıcıları olan bir tabloyla (filtrelenmiş eşleme) devralmayı destekler. Entity Framework, isteğe bağlı eşlemelerin yanı sıra yatay ve dikey eşlemeleri de destekler.
  • ADO.NET Entity Framework ayrıca tablo düzeyinde eşlemeyi de destekler (yani, nesne ilişkisel eşleme olmadan bile). LINQ-to-SQL bunu sunmaz.
  • LINQ-to-SQL, tersine mühendisliğin (yani veritabanlarından iş nesneleri oluşturmanın) yanı sıra ileri mühendisliği de (yani iş nesnelerinden veritabanı oluşturmayı) destekler. ADO.NET Entity Framework ileri mühendisliği desteklemez, yalnızca tersine mühendisliği destekler.
  • LINQ-to-SQL’den farklı olarak ADO.NET Entity Framework, tüm nesne ağaçlarının serileştirilmesini sunar. LINQ’dan SQL’e bağlamalar serileştirilebilir değildir.
  • Her iki model de temel ayarlarda yavaş yüklemeyi kullanıyor ve seçenek olarak hızlı yüklemeyi sunuyor. Tembel yükleme ile LINQ-to-SQL, gerektiğinde bağlı nesneleri otomatik olarak yükler; oysa burada EF, geliştiricinin bunları kod yoluyla açıkça talep etmesini gerektirir. Öte yandan EF, her bir sorgu için hızlı yüklemeyi tanımlayabilme avantajına sahiptir; LINQ-to-SQL’de ise bu ayar veri bağlamı için genel olarak mevcuttur.
  • Nesne-İlişkisel Tasarımcı her iki durumda da farklıdır. LINQ’dan SQL’e tasarımcısı .dbml dosyalarını, EDM tasarımcısı ise .edmx dosyalarını oluşturur. Kullanılan XML formatı çok farklı.
  • EF’deki iş nesnelerinin temel sınıf olarak System.Data.Objects.DataClasses.EntityObject sınıfına ihtiyacı vardır. Bu durumda LINQ’dan SQL’e geçiş daha esnektir çünkü temel sınıfa gerek yoktur.
  • LINQ-to-SQL’de, ek açıklamaları kullanarak program kodunuzda veya harici bir XML dosyasında eşleme oluşturabilirsiniz. EF yalnızca XML dosyaları aracılığıyla eşlemeyi destekler.
  • Başka bir yapı taşı olan ADO.NET Veri Hizmetleri’nin yardımıyla, LINQ-to-Entities sorguları Web Hizmetleri aracılığıyla uzaktaki bir sisteme gönderilebilir ve orada yürütülebilir. Bu seçenek LINQ-to-SQL için mevcut değildir.
  • Programlama arayüzü düzeyinde farklılıklar vardır; B. LINQ-to-SQL’deki SubmitChanges(), ADO.NET Entity Framework’teki SaveChanges() işlevine eşdeğerdir.
Duyuru




Haberin Sonu
 
Üst