Ben bunu biraz inceledim ve "mükemmel" bir çözüm bulamadım. Depo deseni, kısa ömürlü bir denetleyicide var olduğu için bağlamın kısa ömürlü olduğu MVC uygulamaları için harika çalışır, ancak aynı yapıyı VM'nin uzun süre devam edebileceği bir wpf uygulamasına uygulamaya çalıştığınızda sorun oluşur.
Geçmişte bu çözümü, çok fazla basit olan ve hata ayıklaması zor olan neredeyse okunamayan kod miktarlarına neden olan şeyleri aşırı miktarda soyutlamaya teşebbüs ettiğim birçok repo deseninden çok daha basit kullandım. İşte adımlar ...
- EDMX'in Veri erişim katmanınız olarak hareket etmesi için ayrı bir proje oluşturun
- Aynı proje altında bir "Depolar" klasörü oluşturun
"İş Birimi" olarak hareket etmek için bir temel sınıf "BaseRepository" oluşturun. IDisposable
bunu a using(){}
ve partial
diğer depoları uygulamanıza izin verir.
public partial class MyEntityRepository : IDisposable
{
MyEntities context = new MyEntities();
public void Dispose()
{
context.Dispose();
}
}
"MyOtherRepository" adlı başka bir dosya oluşturun. aynı kısmi sınıfı oluşturun ancak o dosyanın içermesini istediğiniz yöntemlere göre yöntemler uygulayın
public partial class MyEntityRepository
{
public void MyOtherMethodSave(EntityObject obj)
{
//work with context
...
context.SaveChanges();
}
}
Şimdi VM'nizde bunu yapabilirsiniz ...
using(MyEntityRepository repo = new MyEntityRepository())
{
repo.MyOtherMethodSave(objectToSave);
}
Bu, tüm depolarınızı tek bir sınıfta gruplandırır, böylece ayrı bir bağlamla uğraşmanıza gerek kalmaz. Yöntemleri farklı dosyalara gruplayarak farklı depoları daha iyi yönetmenizi sağlar ve kod çoğaltmasını önlemeye yardımcı olur. Bunun da ötesinde, bağlamlarınız bu kalıbı kullanmadan olduğu kadar kısa ömürlüdür.
Dezavantajı, daha büyük sistemlerde, repo altında toplanan birçok yönteminiz olabilir. Bu durumda bir çözüm, "Bul" veya "Ekle" gibi bazı temel ortak komutları uygulamak ve özel depolarında uzman komutları uygulamak olacaktır.