2013-06-13 37 views
5

WPF uygulamasında EF ile Prism framework kullanıyorum.MVVM + Entity Framework mimarisi karışıklığı

ViewModel:

  • hizmeti başvuruları tutar (birlik kabı tarafından aktarılır).

Hizmetler:

  • veri tabanı (depo başına tek bir tablo) ile bazik CRUD işlemleri içerir Repository referans tutar verilerle "yüksek seviye" işlemleri sağlanmaktadır.

Deposu: depo

  • her metot kısa ömürlü nesne bağlamında çalışmak "kullanılarak" yol kullanır.

Takılı kaldığım yer burası: nesne bağlamı kaldırıldıktan sonra artık eşlenmiş özellikler ile çalışamıyorum. Veritabanımın modeli karmaşık (birçok ilgili tablo) ve veri alınırken çok .Include() çağrıları kod kirli tutar.

Birkaç iş parçacığı okuduktan sonra, "iş birimi" deseninin muhtemelen ihtiyacım olan şey olduğunu keşfettim.

işin (ve dolayısıyla bağlam) birimi referansı tutulmaktadır: Burada

sorumu geliyor? Görünüm başına bağlamı seçtiğimde, viewModel'in bağlam referansı olması gerekir. Hizmet birimime nasıl iş yapabilirim? Veya ViewModel'de yeni bir Hizmet örneği oluşturmalı ve yapıcı parametresinde bağlam mı geçirmeliyim?

cevap

3

Biz bir projede benzer mimari kullanıyorsanız:.

  • Her ViewModel (yapıcı enjekte alır kendi Servis nesneyi alır doğrudan Görünüm karşılık üst düzey çalışanlar en az bazıları hiyerarşik ViewModels, ebeveynlerinin Hizmetini yeniden kullanabilir, ancak burayı basit tutalım). Varsayılan olarak

  • , her Servis operasyonu

  • Hizmetler bağlam birden fazla işlemi boyunca açık tutmak için ViewModels tarafından çağrılabilir BeginContext ve EndContext yöntemleri var ... Yeni bir bağlam yaratır ama.

Bu bizim için oldukça iyi çalıştı. Bir View açıldığında ve EndContext kapatıldığında BeginContext adını verdiğimiz çoğu zaman.

+1

Son olarak, bunu aşağıdaki yaklaşımla çözüyorum: Görünüm açıldığında, ViewModel, bağlam ve birkaç hizmetten oluşan UnitOfWork nesnesini oluşturur. Aynı birimdeki hizmetler aynı bağlamda enjekte edilmiştir. View kapalı olduğunda iş birimi düzenlenir. Bu konudaki proje [link] (http://teusje.wordpress.com/2011/10/16/unicornmanager-prism-4-mef-wpf-ef-4-1-code-first-nuget-datavalidation/) ayrıca ilham verici. Teşekkür ederim Daniel. – yurislav