2010-06-04 12 views
15

.NET 3.5 SP1'de EF'yi denedim ve hayal kırıklığına uğramış ve bunun yerine LINQ'ı SQL'e öğrenmeye karar verdim. Artık EF'nin "seçili" yol olduğunu biliyorum, ayrıca EF 4.0'ın bazı heyecan verici yeni özellikleri var, uygulamanızı EF 4.0'a taşımak istiyorum.LINQ to SQL'den Entity Framework 4.0'a Geçiş - İpuçları, Dokümantasyon, vb.

4.0 ve L2S geçişi için özel olarak hedeflenen iyi kaynakları önerebilecek herhangi biri var mı? NOT: L2S'den .NET 3.5'teki EF'ye geçişle ilgili çok sayıda blog ve makale bulabilirim, ancak bunların birçoğunun 4.0 kullanan birisine açık ve yararsız olduğunu düşünüyorum.

Alabildiğim kadar derin, kapüşonlu şeyleri çok isterim; Ben gerçekten EF 4.0 gibi bir şey biliyorum.

TIA!

cevap

19

Bu türden bir dönüşüm ve FWIW yüklerini yaptım, farklılıklardan daha çok benzerlikler olduğunu söyleyebilirim. Ben

http://msdn.microsoft.com/en-us/library/ex6y04yf(VS.100).aspx

seni daha ortada ne verebiliriz ... oralarda zaten şeyler ötesinde, EF4'ü bir uzman gibi hissettirecek herhangi bir kesin belge yoktur sanmıyorum "FRİKİKLERİNDEN." Özellikle, Linq2Sql, iş katmanını ve veri katmanını daha açık bir şekilde birleştirmek istedi. Kendi kısmi sınıflarınızı yaratmanız sizi gerçekten zorladı. Bu yolda devam edebilirim, ancak en belirgin sebep, birebir eşleştiricinin tüm ilişkiler için çocuk ve ebeveyn özelliklerini yaratacağı yoldur.

Bu modele karşı herhangi bir serileştirme türünü kullanmaya çalışırsanız, bir seri hale getirici bir üst öğeden diğerine geçtiğinde ve daha sonra ana satıra hareket ettikçe, Linq2Sql serileştirme davranışı otomatik olarak tüm çocukları içerdiğinden, döngüsel başvuru sorunlarıyla karşılaşmak istersiniz. grafikte. Bu, "Ad" özelliğini kontrol etmek ve grafikte yer alan tüm ilgili sipariş kayıtlarını otomatik olarak almak için bir müşteri kaydını tutmaya çalıştığınızda gerçekten can sıkıcı olabilir. Bu ebeveyn ve çocuk gezinme özelliklerini "herkese açık" veya "dahili" olacak şekilde ayarlayabilirsiniz. Bu, onlara erişmek istediğiniz anlamına gelir, ancak serileştiricilerin otomatik olarak dairesel referanslar oluşturmasını istemezseniz, kısmi olarak onlara kısmi olarak erişmeniz gerekir. sınıflar.

Kısmi sınıf yolunu başlattığınızda, genellikle yalnızca kalıba devam edersiniz ve sonunda verilerinizin bireysel varlık sınıflarınıza erişmesi için yardımcı yöntemler eklemeye başlayacaktır. Ayrıca, Linq2Sql DataContext'in daha hafif olmasıyla, çoğu zaman, insanlar, bağlamları için bir çeşit Tekton kalıbı veya Depozit deseni kullanarak karşılaşırsınız. Bunu EF 3.5/4.

ile hiç görmüyorsunuz. Diyelim ki anlatılana benzer bir ortamınız var ve dönüştürmeyi başlatmak istiyorsunuz. Peki, DataContext'inizin ne zaman oluşturulacağını/yokedeceğini öğrenmelisiniz ... bazı insanlar her bir Business Layer metodunu bir using() ifadesiyle başlatacak ve içeriğin yöntemin ömrü boyunca oldukça fazla canlı kalmasına izin verecektir. Açıkçası bu, sorularınızın uçlarına .ToList() veya başka bir uzantı yöntemini eklemeyi gerektiren bazı tüylü durumlara girebileceğiniz anlamına gelir; Daha sonra, varlıkları orijinal olarak alınmadıkları bir bağlamda güncellemeye çalışmakla ilgili sorunlarınız olabilir. Ayrıca, Linq2Sql kısmi sınıflarında bulunan BusinessLogic öğesinin ne kadarının, veri işlemleriyle açıkça ilgilenmiyorsa, başka bir katmana nasıl dağıtılacağını da öğrenmeniz gerekir. Bağlandığınızda/içeriğinize ihtiyaç duymadığınız zaman bu ağrısız olmayacaktır, ancak bu sizin için en iyisidir ..

Ardından, nesne grafiği durumuyla ilgilenmek isteyeceksiniz. Tembel yükleme çalışmalarındaki farklılıklar nedeniyle (bunu yapabilmeleri için Linq2Sql gibi davranmasını sağlamak için EF 4.0'da bu yapılandırılabilir hale getirdiler), muhtemelen Linq2Sql'inizdeki altyazı nesnesinin herhangi bir dolaylı kullanımını kontrol etmeniz gerekecektir. uygulama ve grafikte alt nesneleri almak için artık açık bir .Include() veya bir .Load() gerektirmediğini doğrulayın. Son olarak, genel olarak bir serileştirme çözümüne karar vermeniz gerekecektir. Varsayılan olarak, bir EF modelinin parçası olarak oluşturulan DataContracts ve DataMember öznitelikleri, WCF ile mükemmel çalışır, ancak eski .asmx WebServices gibi şeyler için kullanılan XmlSerializer ile mükemmel değildir. Bu durumda bile, çocuk nesnelerini tel üzerinden serileştirmeniz gerekmiyorsa, oradan kurtulabilirsiniz. Bu genellikle böyle olmadığından, daha fazla SOA'nız varsa WCF'ye geçmek isteyeceksiniz, ki bu da yeni bir fırsat fırsatları, ancak baş ağrıları ekleyecektir.

Kısmi sınıflar durumuyla ve yüksek düzeyde DataContext ve hatta serileştirme sorunları ile başa çıkmak için, EF 4.0 ile kullanılabilen bir dizi yeni kod oluşturma şablonu vardır. POCO-Varlık şablonunda, beklediğiniz gibi (WCF vb. Için herhangi bir sınıf veya üye niteliğini hariç tuttuğunuz gibi) POCO sınıfları yarattığı için çok fazla insan heyecanlanır. Ayrıca, Kendi Kendini İzleme Varlıkları modeli bağlam sorununu çözer, çünkü varlıklarınızı etrafından geçirebilir ve ne zaman ve nasıl güncellendiklerini hatırlamalarını sağlayabilirsiniz, böylece içeriklerinizi çok daha özgürce (Linq2Sql gibi) oluşturabilir/atabilirsiniz. Başka bir ikramiye olarak, bu şablon, WCF için go-to şablonu veya RIA Hizmetleri veya WCF Veri Hizmetleri gibi WCF üzerine inşa edilen herhangi bir şeydir, böylece [DataContract], [DataMember] ve [KnownType] öznitelikleri zaten anlaşılmıştır.

POCO şablonuna bir bağlantı var (kutunun dışında değil): (EDIT: İki köprü yayınlayamıyorum, bu yüzden visualstudio galeri web sitesini ziyaret edin ve "ADO.NET C# POCO Entity Generator" için arama yapın.

ADO.net ekip blogundaki bağlantıyı, bunun uygulanmasıyla ilgili okuduğunuzdan emin olun. WebService ve WCF Hizmet kategorisine girdiğinizde, içeriğinizi ve varlıklarınızı bölümlere ayırmaktan hoşlanırsınız. "Hizmet Referansı Ekle ..." proxy nesli, ad alanlarını "Web Referansı Ekle ..." yöntemiyle aynı şekilde kullanmaz. Bu nedenle, istemci sınıfı derlemenizi istemci uygulamanıza yönlendirmek isteyebilirsiniz, böylece "hariç tutabilirsiniz". referans kitaplıklarından türler "ya da hizmet referanslarınızda ne olursa olsun, aynı EF modelini kullanan ve bu varlıkları açığa çıkaran birden çok hizmetten çok fazla referans almazsınız ...

Bunun uzun ve sarsıcı olduğunu biliyorum, ama bu küçük tuhaflıklar benim için daha fazla bir konu oldu. context.EntityCollection.AddObject() yerine context.EntityCollection.InsertOnSubmit() ve context.SaveChanges() yerine context.SubmitChanges() ...

0

Bu conversion template buldum, bu beta1 (2010) için. Daha yeni bir versiyonu yok gibi görünüyor. Mabe RTM ile çalışmak için değiştirebilirsiniz.

Kendim kullanmadım.

4

EF Kodu için öncelikle var olan ters mühendislik ile ilgilidir. EF tablolarına g tabloları. EF Elektrikli El Aletleri şimdi sizin için yapar:

http://msdn.microsoft.com/en-us/data/jj200620.aspx

dinlenme SQL yerine LINQ veritabanına konuşmak için olanlar oluşturulan sınıfları kullanmak için mevcut kod değiştirerek bariz bir iştir.

+0

Sadece gelecekteki okuyucular için, bu cevabı takiben bunu oldukça az acı ile yapabildim. Tek gerçek sorun, sorgularınızı yeniden yazmanız gereken manuel bölümdür, ancak bu çok da kötü değildir. – joshmcode