Yeni bir uygulama için Genel Depo oluşturmanın avantajları hakkında bazı makaleler okuyordum ( örnek ). Fikir güzel gözüküyor, çünkü aynı depoyu birkaç farklı varlık türü için aynı anda birkaç şey yapmak için kullanmama izin veriyor:
IRepository repo = new EfRepository(); // Would normally pass through IOC into constructor
var c1 = new Country() { Name = "United States", CountryCode = "US" };
var c2 = new Country() { Name = "Canada", CountryCode = "CA" };
var c3 = new Country() { Name = "Mexico", CountryCode = "MX" };
var p1 = new Province() { Country = c1, Name = "Alabama", Abbreviation = "AL" };
var p2 = new Province() { Country = c1, Name = "Alaska", Abbreviation = "AK" };
var p3 = new Province() { Country = c2, Name = "Alberta", Abbreviation = "AB" };
repo.Add<Country>(c1);
repo.Add<Country>(c2);
repo.Add<Country>(c3);
repo.Add<Province>(p1);
repo.Add<Province>(p2);
repo.Add<Province>(p3);
repo.Save();
Bununla birlikte, Deponun uygulanmasının geri kalanının Linq’e büyük bir dayanağı vardır:
IQueryable<T> Query();
IList<T> Find(Expression<Func<T,bool>> predicate);
T Get(Expression<Func<T,bool>> predicate);
T First(Expression<Func<T,bool>> predicate);
//... and so on
Bu depo kalıbı, Entity Framework için harika çalıştı ve hemen hemen DbContext / DbSet'te bulunan yöntemlerin 1 ila 1 eşlemesini teklif etti. Ancak, Linq'in Entity Framework dışındaki diğer veri erişim teknolojilerindeki yavaş alımı göz önüne alındığında, bunun doğrudan DbContext ile çalışmanın avantajı nedir?
Deponun PetaPoco sürümünü yazmaya çalıştım , ancak PetaPoco, yalnızca temel GetAll, GetById, Ekle, Güncelle, Sil ve Kaydet için kullanmazsanız, genel bir IRepository arayüzü oluşturmayı pek işe yaramaz hale getiren Linq Expressions'ı desteklemiyor. temel sınıf olarak yöntemler ve kullanır. Öyleyse, daha önce bir yordam olarak geçirebileceğim tüm "where" cümleciklerini işlemek için özel yöntemlerle özel depolar oluşturmalısınız.
Genel Havuz modeli, Varlık Çerçevesi dışındaki herhangi bir şey için yararlı mı? Eğer değilse, neden doğrudan Entity Framework ile çalışmak yerine birileri onu kullansın ki?
Orijinal bağlantı, örnek kodumda kullandığım deseni yansıtmıyor. İşte bir ( güncellenmiş bağlantı ).