Читав деякі статті про переваги створення загальних сховищ для нового додатка ( приклад ). Ідея здається приємною, оскільки дозволяє мені використовувати одне сховище, щоб робити кілька речей для декількох типів сутності одночасно:
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();
Однак решта реалізації Репозиторію дуже покладається на Linq:
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
Ця модель репозиторію спрацювала фантастично для Entity Framework і в значній мірі запропонувала 1 - 1 відображення методів, доступних у DbContext / DbSet. Але зважаючи на повільне використання Linq для інших технологій доступу до даних за межами Entity Framework, яку перевагу це забезпечує над роботою безпосередньо з DbContext?
Я спробував написати PetaPoco версію Repository, але PetaPoco не підтримує Linq виразів, що дозволяє створювати загальний IRepository інтерфейс досить багато непотрібної , якщо ви тільки не використовувати його для основного GETALL, GetByID, додавання, оновлення, видалення та Зберегти методи та використовувати його як базовий клас. Тоді вам доведеться створити конкретні сховища зі спеціалізованими методами, щоб обробити всі пропозиції "куди", які я раніше міг би передати як предикат.
Чи корисна модель загального репозиторію для чогось поза межами Entity Framework? Якщо ні, то чому б хтось використовував це взагалі, а не працював безпосередньо з Entity Framework?
Оригінальне посилання не відображає шаблон, який я використовував у своєму зразку коду. Ось ( оновлене посилання ).