LINQ to SQL öldü mü?


17

Linq to SQL kullanmaya devam etmek için herhangi bir neden var mı, yoksa EF, NHibernate gibi ORM tekniklerine geçmek daha iyi mi?

Linq to SQL'i uzun süredir var olacak yeni bir büyük kurumsal uygulamada kullanıyoruz. Bu yeni kurumsal uygulama için motivasyon, uygulamanın Visual Basic'te yazılmış olağandır ve Microsoft desteği durdurduğundan beri uygulamayı yeniden yazmak zorunda kaldık. Görünüşe göre zaten oradayız ama bu sefer DAL (Veri Erişim Katmanı) ile.

Bu makaleyi zaten okudum , ancak sadece EF'in zayıflığıyla karşılaştırıldı.


+1 büyük Q. Bu benim için büyüleyici, saklı yordamlarımı hareket ettirmeyi ve geliştirilmiş sorgulama için SQL sorgu dizelerini LINQ'dan SQL'e taşımayı düşünüyorum, artık geliştirilmediğine dair hiçbir fikrim yoktu.
fearoffours

MS, ölmediğini söyleyen küçük bir .NET 4 slayt gösterisi türüne sahiptir - ancak bu birçok şey anlamına gelebilir. .NET 4.0'da geliştirdiler: damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40
MetalMikester

Tekrar olmasın. Bu soru StackOverflow üzerinde ad-nauseum tartışıldı . FUD diyebilir misin?
Robert Harvey

Yanıtlar:


11

Zaten kullanıyorsanız ve herhangi bir zorlukla karşılaşmıyorsanız, mevcut projelere bağlı kalırım.

Linq2SQL oldukça güzel ama sınırlı bir ORM'dir - eğer nesnelerinizi Linq2SQL tarafından sağlanan temel olanlardan daha karmaşık yollarla eşlemek istiyorsanız sıkışmış olacaksınız. Microsoft, .net 4 ile çıktıklarında birkaç hatayı düzeltti, ancak kaynakları genişletmek için kaynak ayırmayacaklarını belirtti.

Muhtemelen sınırlı bir ömre sahip olan oldukça basit bir projeniz varsa, Linq2SQL, Linq2SQL'e bağımlılıkları bir yere sızmamaya dikkat ettiğiniz sürece iyi bir hafif seçimdir. Linq2SQL neredeyse bir çıkmaz gibi başka bir şey (örneğin NHibernate veya EF) ile gitmek istiyorum.


Sadece katılıyorum, gerçekten ölü değil ama bir şekilde triyaj masasında. İşler işe yarıyorsa ve şimdi değiştirmek büyük bir etki ise ... iyi bir şekilde arkanıza yaslanıp EF / NHibernate'e dönüştürmek için iyi bir zaman isteyebilirsiniz, finanse edilen bir yükseltme projesi olabilir (sonunda biz hepsi masada iş, ekmek ve tereyağı ister).
cyberzed

@ cyberzed: Gereksiz işler için iyi bir bahane gibi geliyor.
Robert Harvey

12

Ölü değil, ancak Microsoft artık Entity Framework'e odaklanıyor.

LINQ to SQL'i küçük projelerde kullandım ve hafif bir veri katmanı olarak oldukça güzel ve benzer boyutlu projelerde tekrar kullanmayı düşünürdüm. LINQ uygulamasının kendisi gerçekten iyi ve yakın zamana kadar NHibernate LINQ projesinden çok daha iyi. L2S'yi kullandığım daha büyük projede, L2S 'DataContext' sınıfıyla ilgili sınırlamalar nedeniyle mutlu olduğum bir iş birimi modeli bulmakta zorlandım. L2S ile 'İstek başına oturum' gibi bir şeyi uygulamaya çalışmak çok zor ya da imkansız görünüyor.

Ayrıca L2S'yi gerçek bir ORM olarak düşünmüyorum, çünkü size çok fazla haritalama seçeneği sunmuyor. Sınıf tasarımınızın veritabanı şemanızı (sınıf başına tablo) gerçekten izlemesi gerekir, aksi takdirde yolun her adımında sizinle savaşacaktır. L2S hakkında sevmediğim başka bir şey , koleksiyonları, referansları ve tembel yüklemeyi işlemek için belirli türler ( EntitySetve EntityRef) kullanma gereğidir . Bu, etki alanı model ORM'nizi başka bir soyutlama katmanı eklemeden agnostik tutmanın mümkün olmadığı anlamına gelir.

L2S ile ilgili diğer sorunum, sorgu oluşturmak için LINQ'a olan tek güven. LINQ sağlayıcı çok iyi yazılmış ve genellikle sorguların çoğunluğu için iyi SQL oluşturur ama LINQ ile iyi ifade edilemez daha karmaşık sorgular olduğunu benim endişelerim var. L2S kullanarak temel olarak bu durumlarda saklı yordamları çağırmaya geri dönmelisiniz, oysa (örneğin) NHibernate, oluşturulan SQL üzerinde daha fazla kontrol istediğinizde kullanılabilecek birkaç API'ye (LINQ sağlayıcısı, QueryOver, HQL vb.) Sahiptir.

L2S'nin NHibernate'e karşı savunmasında, onu bir projede çalıştırmak ve çalıştırmak için çok daha az ek yük var.


2

Hala çalıştığı gibi ölü değil, ancak daha fazla geliştirilmiyorsa başka bir şeye geçmek mantıklı olabilir.

Ancak, uygulamanız için işe yararsa, değiştirmek uğruna değişmenin bir anlamı yoktur.


2

ölü imho daha kararlı:

http://www.thinqlinq.com/default/LINQ-to-SQL-enhancements-for-2010.aspx

http://jonkruger.com/blog/2009/06/06/linq-to-sql-is-not-dead/

İyileştirme çabalarını, bu ürünün başarılı olması için gerçekten ihtiyaç duyulan Entity Framework'e kaydırdılar. Bir süre uyumluluk ve linq2sql üzerinde hata düzeltmesi dışında yeni bir şey beklemeyin.

Bu site ben yanılmıyorsam linq2sql bir sürü ile çalıştırılır.


"Kararlı" için +1 L2S görüntülemenin en iyi yolu, imho. Kararlı ve artık genişletilmiyor / değiştirilmiyor.
quentin-starin

Üzgünüm ama "uyumluluk ve hata düzeltme dışında yeni bir şey yok" anlamına gelir. Bu temelde topluluğun ondan uzaklaşacağının bir garantisidir, onu kullanan birçok yeni proje görmezsiniz ve bu yüzden muhtemelen yeni projelerde kullanmak istemezsiniz. "Ölü" bunun işe yaramadığı anlamına gelmez, sadece çok az yenilik veya ilgi olduğu anlamına gelir.
Jeremy

Büyük bir işletme açısından bakıldığında, çekirdeğin artık değiştirilmemesi, birçok durumda onaylanmış teknikler listesine girebileceği anlamına gelir. Çalışma alanımda bir süredir bunu bekliyorduk. EF hala atlamak için hala uçucu ve L2S, EF yükünün istenmediği durumlara her zaman ilgi çekecek.
Bill

@Jeremy İnsanlar hala TeX kullanıyor mu?
alternatif

1

Tuhaf ama bu ifadeyi çok gördüm (“LINQ2SQL öldü”) ve nereden kaynaklandığından emin değilim *. Ölü Windows XP gibi. Microsoft desteği bıraktı ve yeni bir şey yarattı (ve gözlerimde daha iyi), ancak insanlar Linq2SQL'i kullanmakta özgür oldukları için hala XP'yi kullanmakta özgürler. Kuşkusuz, özel DotNetNuke modülleri oluştururken Linq2SQL kullanıyorum. Ancak, EF4'te ilk kod geliştirme gibi yeni özelliklerle ( http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx ) Linq2SQL'e bağlı kalmanın nedenlerini bulmak zordur. Ben geçmek ve kodu güncellemek için bir neden görmüyorum ama yeni kod için neden EF4 kullanmak istemiyorum bilmiyorum.

* Dürüst olmak gerekirse, ben ... anlambilim konusunda takıntılıyım! Başkaları için can sıkıcı olursa özür dilerim :)

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.