Код EF6 сначала с общим репозиторием и внедрением зависимостей и SoC
После долгих чтений и проб сEntity Framework
последняя стабильная версия (6.1.1).
Я читаю много противоречий о том, использовать ли репозитории сEF6
или жеEF
в общем потому что этоDbContext
уже предоставляет хранилище иDbSet
UoW
из коробки.
Позвольте мне сначала объяснить, что содержится в моем решении с точки зрения проекта, а затем я вернусь к противоречию.
Он имеет проект библиотеки классов иasp.net-mvc
проект. Проект lib класса, являющийся доступом к данным и гдеMigrations
включены дляCode First
.
В моем проекте lib класса у меня есть общий репозиторий:
public interface IRepository<TEntity> where TEntity : class
{
IEnumerable<TEntity> Get();
TEntity GetByID(object id);
void Insert(TEntity entity);
void Delete(object id);
void Update(TEntity entityToUpdate);
}
И вот реализация этого:
public class Repository<TEntity> where TEntity : class
{
internal ApplicationDbContext context;
internal DbSet<TEntity> dbSet;
public Repository(ApplicationDbContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual IEnumerable<TEntity> Get()
{
IQueryable<TEntity> query = dbSet;
return query.ToList();
}
public virtual TEntity GetByID(object id)
{
return dbSet.Find(id);
}
public virtual void Insert(TEntity entity)
{
dbSet.Add(entity);
}
public virtual void Delete(object id)
{
TEntity entityToDelete = dbSet.Find(id);
Delete(entityToDelete);
}
public virtual void Update(TEntity entityToUpdate)
{
dbSet.Attach(entityToUpdate);
context.Entry(entityToUpdate).State = EntityState.Modified;
}
}
И вот несколько сущностей:
public DbSet<User> User{ get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<UserOrder> UserOrders { get; set; }
public DbSet<Shipment> Shipments { get; set; }
Я не хочу повторяться, но сEF6
вы больше не пропускаете репозитории, ноDbContext
вместо. Таким образом, дляDI
Я установил следующее вasp-net-mvc
использование проектаNinject
:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope();
}
И это введетApplicationDbContext
через инжектор конструктора в классы верхнего уровня, где это применимо.
Теперь вернемся к противоречию.
Если нам больше не нужен репозиторий, потому чтоEF
уже предоставляет это из коробки, как мы делаемSeparation of Concern
(сокращенно как SoC в заголовке)?
Теперь исправьте меня, если я ошибаюсь, но для меня это звучит так, как будто мне просто нужно выполнить всю логику / вычисления доступа к данным (например, добавление, выборку, обновление, удаление и некоторые пользовательские логику / вычисления здесь и там (для конкретной сущности)) вasp.net-mvc
проект, если я не добавлю хранилище.
Любой свет в этом вопросе действительно ценится.