Entity Framework ve LINQ'dan SQL'e


828

Artık .NET v3.5 SP1 (VS2008 SP1 ile birlikte) piyasaya sürüldüğüne göre, artık .NET varlık çerçevesine erişimimiz var.

Sorum şu. Entity Framework ile LINQ to SQL'i ORM olarak kullanma arasında karar vermeye çalışırken, fark nedir?

Anladığım gibi, Entity Framework (LINQ to Entities ile birlikte kullanıldığında) LINQ to SQL'in 'ağabeyi' mi? Bu durumda - ne gibi avantajları var? LINQ to SQL'in kendi başına yapamadığı ne yapabilir?


138
Aşağıdaki cevapların yeniden incelenmesi gerektiğini düşünüyorum, çünkü EF'in yayınlanmasından bu yana uzun zaman geçti, bu yüzden buraya gelen yeni geliştiriciler yanlış izlenim edinebilirler. EF, ilk çıkışından bu yana BÜYÜK ve KOLAY bir araç haline geldi. Sadece DB ile bağlantıyı kurdunuz ve ihtiyacınız olanın% 90'ı. Deneyimli bakış açısından çok hızlı gelişme! Oradan - LINQ en iyi arkadaşın. Son derece özelleştirilebilir, MVC sadece seviyorum ve kötü olduğunu söyleyen insanlara - Önce nasıl kullanacağınızı öğrenin (ve LINQ'da da tutun)!
graumanoz

10
Açıkçası - şimdi seçeneğiniz var gibi değil - MSFT, LINQ2SQL'i EF lehine etkili bir şekilde öldürdü. Bununla birlikte, MSFT açık kaynaklı EF'in daha az emmesine yardımcı oldu ve kesinlikle daha iyi hale geldi. Ancak EF'e giren herkes için - EF'de hala birçok tuhaflık olduğunu anladığınızdan emin olun. Ben hakkında bir mesaj gönderdim - stackoverflow.com/questions/305092/…
nikib3ro

4
@ kape123, (a) SQL'den LINQ "ölü" değildir; hala kullanılabilir; (b) LINQ to SQL, Windows Phone 8 geliştirmedeki standart veri erişim yöntemidir.
Ryan Lundy

9
@ user3308043, [alıntı gerekli].
Ryan Lundy

3
@Kyralessa - 2010 itibariyle (bulabildiğim en son alıntı olan .NET4.0'ın piyasaya sürülmesiyle birlikte) MS , LINQ2SQL'e biraz yatırım yapılabilirken, "genel yatırımımızın büyük bir kısmının Varlık'ta olacağını kabul etti. Çerçeve."
kmote

Yanıtlar:


483

LINQ to SQL, yalnızca Microsoft SQL Server'da bulunan veritabanı tabloları, görünümler, sprocs ve işlevlerin 1'e 1 eşlenmesini destekler. Nispeten iyi tasarlanmış SQL Server veritabanlarına hızlı veri erişimi oluşturmak için harika bir API. LINQ2SQL ilk olarak C # 3.0 ve .Net Framework 3.5 ile piyasaya sürüldü.

LINQ to Entities (ADO.Net Entity Framework), nesne etki alanı modellerinin ve bunların birçok farklı ADO.Net veri sağlayıcısıyla ilişkilerinin geniş bir tanımlamasına izin veren bir ORM (Nesne İlişkisel Eşleyici) API'sıdır. Bu nedenle, çeşitli tablolar, kaynaklar, hizmetler, vb. .Net Framework 3.5 SP1.

Bu MSDN hakkında iyi bir tanıtım makalesi: İlişkisel Verilere LINQ Tanıtımı


EF sorgulamak için LINQ to SQL kullandığınız anlaşılıyor
PositiveGuy

11
@CoffeeAddict, LINQ lambdas kullanarak stile çok benzemekle birlikte, her API'nin tamamen farklı temelleri vardır. Örneğin, LINQ2SQL'in SQL sorguları üretme biçimi SQL işlevlerinin kullanılmasına izin verirken, L2E 2008'den beri desteklemez veya en azından 2008'de değildir.
Kris

2
EF nesne yönelimli yaklaşım, kullanımı gerçekten kolay ve rahat hale getirir, çok hızlı kodlanabilir, yönetilebilir. Benim için veriye erişmenin en iyi yolu.
Antoine Pelletier

10
Bu cevap kullanılmıyor. Linq to SQL, one2many mapping'i destekliyor
George Lanetz

201

Bence hızlı ve kirli cevap

  • LINQ to SQL bunu yapmanın hızlı ve kolay yoludur. Bu, daha hızlı gideceğiniz ve daha küçük bir şey üzerinde çalışıyorsanız daha hızlı teslim edeceğiniz anlamına gelir.
  • Varlık Çerçevesi, bunu yapmanın her şeyi barındıran, engelsiz bir yoldur. Bu, daha fazla zaman harcayacağınız, daha yavaş geliştireceğiniz ve daha büyük bir şey üzerinde çalışıyorsanız daha fazla esnekliğe sahip olacağınız anlamına gelir.

32
EF ile aynı şeyi başarmak için L2S ile daha az kod satırı yazma eğiliminde olacaksınız. EF'de tembel yükleme olmaması, her zaman bir şeyin yüklenip yüklenmediğini kontrol ettiğiniz anlamına gelir.
Paul Mendoza

Brad, bir e-ticaret sitesi için ne önerirsiniz? Yani basit CRUD'lardan başka bir şey göremiyorum ...
PositiveGuy

2
@CoffeeAddict açıkçası, en çok oy alan cevabın ilk 3'ü basit CRUD için L2S diyor
IsmailS

11
@Banford .NET 4.0 EF ile L2S daha iyi olduğunu düşünüyorum. 3.5'te L2S'de EF'den eksik olan özellikler .NET 4.0'da EF'e eklenmiştir. .NET 4.0'da EF'de bulunan LINQ ifadeleriniz L2S'dekiyle hemen hemen aynı görünecektir. EF, L2S'nin sunduklarının üstünde şimdi yapabileceğiniz bazı ekstra şeyleri size getiriyor.
Paul Mendoza

40
Bu cevap şimdi 5 yaşında ve oldukça eski. Entity Framework 6 şimdi Beta sürümündedir ve çok geliştirilmiştir, Tembel yükleme, numaralandırma desteği vb
Tim

109

LINQ to SQL Gerçekten Ölü mü? Jonathan Allen tarafından InfoQ.com

Matt Warren, [LINQ'dan SQL'e], "asla var olması bile gerekmeyen" bir şey olarak tanımlar. Aslında, gerçek ORM hazır olana kadar LINQ geliştirmelerine yardımcı olmak için sadece stand-in olması gerekiyordu.

...

Entity Framework ölçeği, .NET 3.5 / Visual Studio 2008 son tarihini kaçırmasına neden oldu. Ne yazık ki, bir hizmet paketinden çok büyük bir sürüm gibi görünen ".NET 3.5 Service Pack 1" için zamanında tamamlandı.

...

Geliştiriciler karmaşıklık nedeniyle [ADO.NET Entity Framework] ürününü sevmiyor.

...

.NET 4.0 itibariyle, LINQ to Entities ilişkisel senaryolara LINQ için önerilen veri erişim çözümü olacaktır.


56
Aslında, EF'i sevmiyoruz çünkü çok kötü bir tasarımcıya sahip ve son derece, son derece buggy. Hiç bu kadar karmaşık olduğunu hiç bulamadım.
BlueRaja - Danny Pflughoeft

12
Birçok büyük e-ticaret sitesi LINQ to SQL kullanır. Örnekler: Redbox, Stackoverflow, vb.
Positive

14
LINQ to SQL kullanan ve bu makalelerin tamamen abartılı olduğunu söylüyor iyi geliştiriciler bir sürü biliyorum. Katılıyorum. LINQ to SQL güçlü .comlarda kullanılmıştır ve hala kullanılmaktadır.
PositiveGuy

4
Evet, bir L2EF sorgusundaki tamsayı özelliğinde .ToString () yönteminin çağrılması kural dışı duruma neden olmamalıdır.
StingyJack

3
@ BlueRaja-DannyPflughoeft 5 yıldan fazla bir süre sonra hala geçerli mi?
Vikas Rana

94

@Lar'ın yayınladığı makalede ana hatlarıyla belirtilen bir takım belirgin farklılıklar vardır, ancak kısa cevap şöyledir:

  • L2S sıkıca bağlandı - belirli bir veritabanı alanına nesne özelliği veya belirli bir veritabanı şemasına daha doğru nesne eşlemesi
  • L2S sadece SQL Server ile çalışacaktır (bildiğim kadarıyla)
  • EF, tek bir sınıfı birden çok tabloyla eşlemeye izin verir
  • EF MM ilişkilerini ele alacak
  • EF, herhangi bir ADO.NET veri sağlayıcısını hedefleme yeteneğine sahip olacaktır

Orijinal öncül L2S Hızlı Geliştirme için, EF daha "girişimci" n katmanlı uygulamalar için, ama bu L2S biraz kısa satıyor.


13
Teklifiniz "L2S yalnızca SQL Server ile çalışacaktır (bildiğim kadarıyla)" güncellenmesi gerekiyor: açık kaynaklı proje "dblinq", LINQ to SQL derlemesini MySQL, PostgreSQL, Ingres, Firebird, SQLite ile konuşabilen bir proje ile değiştirir. .. ve Microsoft SQL (tabii ki).
Contango

1
bekleyin ... yani EF sıkı sıkıya bağlı DL nesneleri oluşturmuyor mu?
PositiveGuy

7
Evet, L2S'nin kurumsal özellikli bir çözüm olmadığı ilk önceliği artık doğru değil. Yani StackOverflow L2S ve Redbox gibi diğer .com ve bir sürü üzerinde çalışır.
PositiveGuy

74

SQL'den LINQ

  1. Homojen veri kaynağı: SQL Server
  2. Yalnızca veri yapısının iyi tasarlandığı küçük projeler için önerilir
  3. Eşleme, SqlMetal.exe ile yeniden derlenmeden değiştirilebilir
  4. .dbml (Veritabanı İşaretleme Dili)
  5. Tablolar ve sınıflar arasında bire bir eşleme
  6. TPH mirasını destekler
  7. Karmaşık türleri desteklemez
  8. Önce depolama yaklaşımı
  9. Bir veritabanının veritabanı merkezli görünümü
  10. Oluşturan C # team
  11. Desteklenen ancak daha fazla geliştirilmemesi amaçlanan

Varlık Çerçevesi

  1. Heterogeneus veri kaynağı: Birçok veri sağlayıcısını destekler
  2. Aşağıdakiler hariç tüm yeni projeler için önerilir:
    • küçük olanlar (LINQ to SQL)
    • veri kaynağı düz bir dosya olduğunda (ADO.NET)
  3. Model ve dosya eşlenirken eşleme yeniden derleme yapılmadan değiştirilebilir Meta Veri Artefakt Süreci Çıktı Dizine Kopyala
  4. Şunları içeren .edmx (Varlık Veri Modeli):
    • SSDL (Depolama Şeması Tanımlama Dili)
    • CSDL (Kavramsal Şema Tanımlama Dili)
    • MSL (Eşleme Belirtimi Dili)
  5. Tablolar ve sınıflar arasında bire bir, bire çok, çoktan bire eşlemeler
  6. Kalıtsallığı destekler:
    • TPH (Hiyerarşi Başına Tablo)
    • TPT (Tür Başına Tablo)
    • TPC (Beton Sınıfı Başına Masa)
  7. Karmaşık türleri destekler
  8. Önce kod, Önce model, Önce depolama ilkesi yaklaşımları
  9. Veritabanının uygulama merkezli görünümü
  10. SQL Server ekibi tarafından oluşturuldu
  11. Microsoft Veri API'lerinin Geleceği

Ayrıca bakınız:


6
Bu en güncel ve ayrıntılı cevaptır.
ErTR

2
Diyelim ki, bir varlık yazarken Entity Framework, LINQ to SQL kullanmıyordbSet<Orders>.Where()...ToList() mu? Entity Framework'ün LINQ'dan SQL'e karşı çıkması yanıltıcıdır.
Don Cheadle

4
@mmcrae EF L2S kullanmaz , her ikisi de temeldeki veritabanlarına linq sağlayıcılarıdır. Linq-to-database ve linq-x-xml gibi Linq-a-database olarak yorumluyorsanız, evet, her ikisi de linq-a-database'de benzerdir. Ama hayır, EF L2S kullanmıyor (ya da tam tersi). Tamamen ayrılmış iki araç.
Maarten

4
"Küçük projeler hariç tüm yeni projeler için önerilir" Katılıyorum. Code First, küçük projelerle yere ulaşmanın son derece hızlı bir yoludur. Bunun dışında, bu soru için büyük güncelleme.
DrewJordan

51

Entity Framework ile yaşadığım deneyim yıldızdan daha az oldu. İlk olarak, EF temel sınıflarından miras almalısınız, bu yüzden POCO'lara güle güle deyin. Tasarımınızın EF etrafında olması gerekir. LinqtoSQL ile mevcut iş objelerimi kullanabilirim. Ayrıca, tembel yükleme yoktur, bunu kendiniz uygulamanız gerekir. POCO'ları ve tembel yüklemeyi kullanmak için etrafta bazı çalışmalar var, ancak EF henüz hazır olmadığı için IMHO var. 4.0'dan sonra tekrar gelmeyi planlıyorum


7
POCO desteğinin olmaması, Entity Framework üzerinden LINQ to SQL'i seçmemizin bir numaralı nedenidir. Gelecek vaat ettikleri gibi bir sonraki sürüme dahil ettiklerinde EF'i tekrar ziyaret edebilirim. EF için POCO'lar yapan ancak yeterince temiz olmayan bazı ek projeler var.
Joseph Ferris

27
Birisi (benim gibi)
POCO'nun

4
POCO'ları desteklememenin büyük yaygarasının ne olduğunu gerçekten görmüyorum ... bu bir soyutlama seviyesi daha. Veri deposunu enjekte ederek bir fabrika oluşturun ve POCO'larınızı orada oluşturun. Her neyse, muhtemelen iyi bir fikir.
EightyOne Unite

3
EF 4'te POCO'nun mümkün olduğunu duyuyorum
PositiveGuy

8
POCO desteği bugünlerde mevcuttur ve miras @CoffeeAddict POCO belirli çerçeve üzerinde hiçbir güven ile sadece basit bir nesnedir artık varlık sınıfları için bir gerekliliktir ve modern varlık çerçevesi desen önemli bir parçasıdır
Chris McGrath

46

Burada , basit kelimelerde ne zaman kullanılacağını açıklayan çok iyi bir cevap buldum :

Hangi çerçevenin kullanılacağının temel kuralı, sunum katmanınızdaki verilerinizi düzenlemeyi nasıl planlayacağınızdır.

  • Linq To-SQL - sunum katmanınızdaki verilerinizin bire bir ilişkisini düzenlemeyi planlıyorsanız bu çerçeveyi kullanın. Yani herhangi bir görünümde veya sayfada birden fazla tablodan veri birleştirmeyi planlamıyorsunuz.

  • Varlık Çerçevesi - görünümünüzde veya sayfanızda birden fazla tablodan veri birleştirmeyi planlıyorsanız bu çerçeveyi kullanın. Bunu daha açık hale getirmek için, yukarıdaki terimler yalnızca görüntülenmekle kalmayıp görünümünüzde veya sayfanızda değiştirilecek verilere özeldir. Bunu anlamak önemlidir.

Varlık Çerçevesi ile düzenlenebilir bir biçimde sunu katmanına sunmak için tablolanmış verileri bir araya getirebilir ve daha sonra bu form gönderildiğinde EF çeşitli tablolardaki TÜM verileri nasıl güncelleyeceğini bilecektir.

L2S yerine EF'i seçmek için muhtemelen daha doğru nedenler vardır, ancak bu muhtemelen anlaması en kolay olanı olacaktır. L2S, görünüm sunumu için verileri birleştirme özelliğine sahip değildir.


36

Benim izlenim, Linq2Sql ihtiyaçlarınızı karşılamıyorsa, veritabanınızın oldukça muazzam veya çok kötü tasarlanmış olmasıdır. Linq2Sql kullanan hem daha büyük hem de daha küçük yaklaşık 10 web sitem var. Varlık çerçevesine birçok kez baktım ama Linq2Sql üzerinde kullanmak için iyi bir neden bulamıyorum. Veritabanlarımı model olarak kullanmaya çalıştığımı söylediğim için model ve veritabanı arasında zaten 1'e 1 eşleme var.

Şu anki işimde 200'den fazla tablo içeren bir veritabanımız var. Birçok kötü çözüm içeren eski bir veritabanı var, bu yüzden Linq2Sql üzerinde Entity Framework avantajını görebiliyordum ama yine de veritabanını uygulamanın altyapısı olduğu için veritabanını yeniden tasarlamayı tercih ediyorum ve veritabanı kötü tasarlanmış ve benim uygulamadan sonra yavaş olacaktır. Böyle bir veritabanında Entity çerçevesinin kullanılması, kötü modeli gizlemek için bir hızlı düzeltme gibi görünür, ancak böyle bir veritabanından aldığınız kötü performansı asla gizleyemez.


1
Asıl noktanız - küçük veritabanlarında bile, veritabanı tabloları ve kod / etki alanı nesneleri arasında 1: 1 ilişkiden farklı bir şey isteyebilirsiniz. Sadece veri yolu / etki alanı nesnelerinde ne kadar soyutlama istediğinize bağlıdır.
simya

18
Bunu farkettim :) Bugün ticari varlıklarımı elle kodlamayı seviyorum. Ben hala Linq2sql kullanın ama sadece Linq2sql kullanarak veri almak ve veri depoları içinde linq2sql varlıkları benim özel iş varlıkları dönüştürmek içinde benim depolar içinde. Belki bir or-mapper kullanmaktan biraz daha fazla iş ama yine de iş katmanımı OR-mapper'a özgü herhangi bir koddan uzak tutmak istiyorum.
terjetyl

25

2
Yanıttaki bazı şeyler doğru değil. Önce Kod kullanıyorsanız EDMX gerekmez. Ve İlk Kod kullanırken DI'nin nasıl oynandığını anlamıyorum.
Maarten

1
Ayrıca, Linq to SQL model sınıflarından bir DB gayet iyi doldurabilir. DB'nin kendisini üretip üretemeyeceğinden emin değilim, ancak şema ve tabloları oluşturmak Linq'in içine SQL'in yeteneklerine düşüyor.
Tom Lint

Cevabınız için teşekkürler, bir kullanırken kullanırken veritabanından kod / harita oluşturmak için sqlmetal.exe docs.microsoft.com/en-us/dotnet/framework/tools/… kullanabilirsinizLinq to SQL
Vinod Srivastav

23

Buradaki yanıtlar Linq2Sql ve EF arasındaki farkların çoğunu kapsıyordu, ancak çok fazla dikkat edilmeyen bir anahtar nokta var: Linq2Sql sadece SQL Server'ı desteklerken EF'nin aşağıdaki RDBMS'leri sağlayıcıları var:

Microsoft tarafından sağlanmıştır:

  • ADO.NET için sürücüler için SQL Server, OBDC ve OLE DB

Üçüncü taraf sağlayıcılar aracılığıyla:

  • MySQL
  • torpil
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • ınformix
  • U2
  • Sybase
  • Synergex
  • Firebird
  • Npgsql

birkaç isim.

Bu, EF'i ilişkisel veri deponuz üzerinde güçlü bir programlama soyutlaması yapar, yani geliştiricilerin temel veri deposundan bağımsız olarak çalışmak için tutarlı bir programlama modeli vardır. Bu, geniş bir yelpazedeki yaygın RDBMS'lerle birlikte çalışmasını sağlamak istediğiniz bir ürün geliştirdiğiniz durumlarda çok yararlı olabilir.

Bu soyutlamanın faydalı olduğu diğer bir durum da, bir dizi farklı müşteriyle veya bir kuruluştaki farklı iş birimleriyle çalışan bir geliştirme ekibinin parçası olduğunuz ve olması gereken RDBMS'lerin sayısını azaltarak geliştirici verimliliğini artırmak istediğinizdir. farklı RDBMS'lerin üzerinde bir dizi farklı uygulamayı desteklemek için


15

EF kullanırken aynı veritabanı modeli içinde birden fazla veritabanı kullanamadığımı fark ettim. Ancak linq2sql'de şema adlarını veritabanı adlarıyla önek olarak ekleyebilirim.

Başlangıçta linq2sql ile çalışmaya başlamamın nedenlerinden biri de buydu. EF'in bu işlevselliğe henüz izin verip vermediğini bilmiyorum, ancak buna izin vermemenin amaçlandığını okuduğumu hatırlıyorum.


12

Veritabanınız basit ve basitse, LINQ to SQL bunu yapacaktır. Tablolarınızın üstünde mantıksal / soyutlanmış varlıklara ihtiyacınız varsa, Entity Framework için gidin.


4
Entity Framework, veritabanının en üstünde bir soyutlama katmanına izin verir. Bugün birçok OR Haritacısı ile ilgili sorun (bence) tablolar ve sınıflar arasında 1'e 1 eşleme sağlamaktır. Veritabanı modeli, her zaman bir iş modeli açısından bu konuda düşündüğümüz yolu yansıtmaz.
senfo

Boş yer kalmadı. Her neyse, yukarıda söylediklerime dayanarak, cevabınızın tam olmadığını iddia ediyorum.
senfo

7
Bence bu gerçekten kötü bir tavsiye. L2S, veritabanınızın basitliğine veya karmaşıklığına bakılmaksızın iyidir . Gerçek tuzak endişelerin doğru bir şekilde ayrılmasını sağlamaz. İş katmanınızı ve veri erişim katmanınızı birleştirmeye çalışırsanız ve Linqed up nesnelerinizi her şey için kullanırsanız, L2S sınırlayıcı bulacaksınız. Ancak bu aşırı basit ve monolitik bir tasarımla ilgili bir sorundur. L2S harika bir DAL yapar ve sorgulama ve kalıcılığı iş kurallarınızdan ayrı bir endişe olarak görürseniz, uzun vadede birçok alanda kendinizi çok fazla sorundan kurtaracaksınız.
mattmc3

1
bu bana hiçbir şey söylemiyor. Terimlerinizde basit olan nedir?
PositiveGuy

1
ve "mantıksal / soyutlanmış" bir ihtiyaca örnek olarak ne demek istiyorsun. Evet soyutlamanın ne olduğunu biliyorum ama bağlamınızdaki bir örnek lütfen ... bana tam olarak ne dediğini açıklamak için ... açıkla, sadece genel argo verme ... konuşmacıya göre bu kelimelerle SİZİN ne demek istediğine dair hiçbir fikrim yok.
PositiveGuy

8

İkisi de benzersiz SQL 2008 veri tiplerini desteklemiyor. Benim bakış açımdan farkı, Entity'nin gelecek veri sürümlerinde coğrafi veri tipim etrafında bir model oluşturma şansı olması ve Linq to SQL'den vazgeçilmesi asla olmayacak.

NHibernate veya OpenAccess ile neler olduğunu merak edin ...


3
Entity Framework 5'ten itibaren desteklenen SQL Server 2008 Uzamsal veri türleri (Open Geospatial Consortium OGS). Diğer sağlayıcılar (Devart for Oracle) da desteklenmektedir. Bkz. Msdn.microsoft.com/en-us/data/dn194325 .
subsci

6

Ortada garip bir şey olmadan hızlı bir şey geliştirmeniz gerekiyorsa ve tablolarınızı temsil eden varlıklara sahip olmak için tesise ihtiyacınız varsa:

Linq2Sql iyi bir müttefik olabilir, LinQ ile kullanmak büyük bir geliştirme zamanlaması ortaya çıkarır.


4
"Ortada garip şeyler yok", tamam bununla ne demek istiyorsun. "Ortada garip bir şey" örneği
Positive

Bu cevabı düzenlemek veya silmek güzel olurdu, artık modern gelişim için kullanışlı değil ve insanları yanlış yola sokabilir.
Giulio Caccin

6

Linq-to-SQL kullanan büyük bir projesi olan müşteri için çalışıyorum. Entity Framework o sırada bazı önemli özelliklerden yoksun olduğu ve Linq-to-SQL'in performansı çok daha iyi olduğu için proje başladığında bu bariz bir seçimdi.

Şimdi EF evrim geçirdi ve Linq-to-SQL, yüksek düzeyde ölçeklenebilir hizmetler için harika olan zaman uyumsuz desteğe sahip değil. Bazen saniyede 100'den fazla isteğimiz var ve veritabanlarımızı optimize etmemize rağmen, çoğu sorgunun tamamlanması birkaç milisaniye sürüyor. Senkronize veritabanı çağrıları nedeniyle, iş parçacığı engellenir ve diğer istekler için kullanılamaz.

Yalnızca bu özellik için Varlık Çerçevesine geçmeyi düşünüyoruz. Microsoft'un Linq-to-SQL'e zaman uyumsuz destek uygulamadığı (ya da topluluğun bunu yapabilmesi için utanç verici) bir utanç.

Ek Aralık 2018: Microsoft, .NET Core'a doğru ilerliyor ve Linq-2-SQL, .NET Core'da desteklenmediğinden, gelecekte EF.Core'a geçebildiğinizden emin olmak için EF'e taşınmanız gerekir.

LLBLGen gibi dikkate alınması gereken başka seçenekler de vardır . Zaten uzun süredir var olan ve MS veri çözümlerinden (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core) daha fazla kanıtlanmış olgun bir ORM çözümüdür.


2

Linq SQL

Yalnızca SQL Server'ı desteklediği sağlayıcıdır. SQL Server veritabanı tablolarını .NET nesnelerine eşlemek için kullanılan bir eşleme teknolojisidir. Microsoft'un bir ORM - Nesne İlişkisel Eşleştiricisi'nde ilk denemesi.

Linq varlıkları

Aynı fikir, ama arka planda Entity Framework kullanarak, ORM olarak - yine Microsoft'tan, Varlık çerçevesinin çoklu avantajını destekleyen Varlık çerçevesinin ana avantajı geliştirici, farklı veritabanlarında herhangi bir işlem gerçekleştirmek için sözdizimi öğrenmeye gerek yok herhangi bir veritabanı üzerinde çalışabilir

Kişisel tecrübelerime göre Ef, daha iyi (SQL hakkında hiçbir fikriniz yoksa) LINQ'daki performans, lambda ile yazılmış EF neden LINQ diliyle karşılaştırıldığında biraz daha hızlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.