Код 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 проект, если я не добавлю хранилище.

Любой свет в этом вопросе действительно ценится.

Ответы на вопрос(1)

Ваш ответ на вопрос