Şu anda inşa ettiğim uygulama, veritabanı nesnelerini temsil etmek için Saklı yordamları ve el yapımı sınıf modellerini kullanmaktadır. Bazı insanlar Entity Framework kullanmayı önerdi ve projeye o kadar da uzak olmadığım için buna geçmeyi düşünüyorum. Benim sorunum, EF için tartışan insanların bana sadece şeylerin iyi tarafını söylediklerini hissediyorum, kötü tarafı değil :)
Temel endişelerim:
EF için argümanlar:
Mevcut mimarimiz, parametrelenmiş Saklı Yordamlar aracılığıyla veritabanı çağrılarını işleyen bir WPF Hizmeti, WCF hizmetine ve WPF istemcisine giden/WPF istemcisine giden POCO nesneleri ve Doğrulama amacıyla POCO'ları sınıf Modellerine dönüştüren WPF masaüstü istemcisinin kendisinden oluşur. Bağlanma verileri.
Yani sorum şu: EF bunun için doğru mu? EF hakkında bilmediğim bir tuzak var mı?
Kısa süre önce Entity Framework'ü değerlendiriyordum ve sorunlar ve eksik özellikler için bulduğum en iyi yer: http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions
En çok oy alan ürünler:
Kullanıcı Sesi listesinde daha birçok sorun var.
Bir yan not olarak, İlk Kod yaklaşımı içerecek olan EF 4.1'in yakında çıkacağı konusunda oldukça heyecanlıyım ... http://blogs.msdn.com/b/adonet/archive/2011/03/15 /ef-4-1-release-candidate-available.aspx
Bu aslında beni bir üretim uygulamasında EF denemeye zorlayabilir.
EF ile hata başına dal/özellik yapmak, birleştirme zamanında oldukça acı verici olabilir. A ve B'nin iki şubesinin veritabanında değişiklikler yaptığını düşünün (muhtemelen yeni bir projenin ilk aşamalarında çok şey olacaktır).
Tüm "normal" dosyaları - cs dosyalarını vb. Birleştirirsiniz. Ve sonra Model.edmx'i birleştirme zamanı. Ve aniden sadece nesne modeliniz ve veritabanınız arasındaki mantıksal eşleştirmeleri değil, aynı zamanda varlık diyagramındaki tabloların konumlarını birleştiriyorsunuz.
Merging Model.edmx o kadar acı verici ki, oldukça kötü bir şekilde Çalışır:
Eksik olduğunuz EF'in birkaç avantajı daha var:
Dezavantajları (özellikle doğrulama kullanıyorsanız):
objecttüründedir, bu nedenle meta verileri okumak için oradadır. Hala çok fazla aktif olmayan kod.
Bunlar benim en büyük iki şikayet. Bir dizi fayda var, ancak NHibernate'den aynı faydaları elde edebilirsiniz. EntityFramework masanın üzerinde ise, ekibin ayrıca NHibernate'e bakmasını sağlayın ve your projesi için artıları/eksileri için hızlı bir atış yapın.
Meta veri sınıfı sorunu bir baş ağrısı, ama neyse ki sadece doğrulama etiketlerine ihtiyaç duyan çok fazla varlığım var.
Nesneleriniz için gerçek bir bağımsız mod olmaması, bir web ortamında yapabileceklerinizi sınırlar. Bağlı mod, bir dizi Microsoft yeniliğinin ortaya çıktığı masaüstü uygulamaları için daha iyidir. Müstakil mod mümkün, ama çok acı verici. Bu durumda alternatif bir araç kullanmak en iyisidir.
Microsoft'un pek iyi olmadığı bir şey geriye dönük
karşılaştırılabilirlikuyumluluk, özellikle yeni teknolojiler söz konusu olduğunda
Özellikle EF1 (.net 3.5), EF4'ten (.net 4.0) çok farklıdır - bir sonraki sürüm için de aynı durum ortaya çıkabilir.
Süre bekler ve teknolojinin nasıl olgunlaştığını görürdüm.
Bu arada, nHibernate kullanmayı düşünün - eşdeğer değil, ancak olgun ve çılgınca kullanılıyor.
10 sayfalık bir diyalog yazabilirim. Ama, sadece Şirket X için biraz atmak app yazıyorsanız .. o zaman kimin umurunda. Ancak, bir yazılım ürünü geliştiriyorsanız ... çok daha anal olmanız gerekecek
Ana noktalar:
Yukarıdaki bağlantının EF1 hakkında konuştuğunu unutmayın.
Ayrıca bu bağlantı: http://ormeter.net/ EF'in performans ve LINQ desteğindeki diğer ORM'lerle karşılaştırıldığında en iyi olmadığını gösterir.