Для простого репозитория
public interface ISimpleRepository<T>
{
IApplicationState AppState { get; set; }
void Add(T instance);
void Delete(T instance);
void Delete(Guid rowGuid);
IQueryable<T> GetAll();
T Load(Guid rowGuid);
void SaveChanges();
void Update(T instance);
}
Моя реализация метода Load()
для конкретного хранилища для класса Product
может выглядеть так:
public Product Load(Guid rowid)
{
return (from c in _ctx.Products where c.id == rowid select c).FirstOrDefault();
}
Теперь это предполагается, когда мой класс реализации репозитория выглядит так:
public class EntityFrameworkProductsProvider : IRepository<Product> ...
Что если бы у меня было несколько десятков или сотен этих маленьких и простых сущностей, которые все использовали бы одно и то же поведение при выполнении CRUD (используя одну и ту же реализацию методов)? Я, конечно, не хочу идти и создавать класс для реализации IRepository для каждого из них ..
Я хочу что-то вроде этого:
public class EntityFrameworkDefaultProvider<T> : IRepository<T> ...
но я не знаю, как реализовать выражение LINQ Select, потому что, конечно, я не могу написать from e in _ctx.T where e...
или нет?
Я еще не сталкивался с этим сценарием, потому что до сих пор у меня были только очень специфические объекты с пользовательской реализацией репозитория.