EF6 Code First mit generischem Repository und Dependency Injection und SoC

Nach vielem Lesen und Ausprobieren mitEntity Framework neueste stabile Version (6.1.1).

Ich lese viele Widersprüche darüber, ob ich Repositorys mit @ verwenden soll oder nichEF6 oderEF im Allgemeinen, weil es @ iDbContext bietet bereits ein Repository undDbSet dasUoW, sofort einsatzbereit.

assen Sie mich zunächst erklären, was meine Lösung in Bezug auf das Projekt enthält, und dann werde ich auf den Widerspruch zurückkomme

s hat ein Klassenbibliotheksprojekt und einasp.net-mvc project. Das class lib Projekt ist der Datenzugriff und woMigrations sind aktiviert fürCode First.

In meinem class lib Projekt habe ich ein generisches Repository:

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);
}

nd hier ist die Implementierung davo

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;
    }
}

Und hier ein paar Entitäten:

public DbSet<User> User{ get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<UserOrder> UserOrders { get; set; }
public DbSet<Shipment> Shipments { get; set; }

Ich weiß nicht, was ich sagen soll, aber mitEF6 Sie übergeben keine Repositories mehr, aber dasDbContext stattdessen. So fürDI Ich habe im @ folgendes eingestelasp-net-mvc project usingNinject:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope();
}

Und dies wird das @ injizierApplicationDbContext Über Konstruktorinjektion an Klassen der oberen Schicht, wo zutreffend.

un komme ich auf den Widerspruch zurüc

Wenn wir kein Repository mehr benötigen, weilEF bietet das bereits im Auslieferungszustand an. Wie machen wir das?Separation of Concern (im Titel mit SoC abgekürzt)?

Korrigieren Sie mich jetzt, wenn ich falsch liege, aber es hört sich für mich so an, als müsste ich nur die gesamte Datenzugriffslogik / -berechnung ausführen (wie Hinzufügen, Abrufen, Aktualisieren, Löschen und einige benutzerdefinierte Logik / Berechnungen hier und da (entitätsspezifisch) ) in demasp.net-mvc project, wenn ich kein Repository hinzufüge.

Jedes Licht in dieser Angelegenheit wird wirklich geschätzt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage