Questo sarebbe un modo corretto di utilizzare il modello di repository nell'applicazione ASP .NET MVC che implementa Entity Framework?

2

Questa applicazione ASP .NET MVC implementa Entity Framework.

Ho dichiarato i repository in DbContext in questo modo:

public class CompanyDbContext : DbContext
{
        // constructor goes here

        public DbSet<Customer> Customers { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<CustomerOrder> CustomerOrders { get; set; }

        private IGeneralEntityRepository<Customer> customersRepository;
        private IGeneralEntityRepository<Order> ordersRepository;

        // ...................
}

In questo modo possiamo dichiarare e inizializzare CompanyDbContext all'interno di un controller e quindi accedere ai repository usando l'istanza di CompanyDbContext.

È corretto? O dovrei creare una classe separata "Unità di lavoro" per accedere ai repository?

    
posta Deniz 22.02.2014 - 02:18
fonte

1 risposta

3

I repository devono dipendere da DbContext e non viceversa. Inoltre, non è necessario implementare l'Unità di lavoro poiché DbContext lo implementa già. Puoi farlo in questo modo:

public interface IRepository<T>
{
    T ReadOne(object key);

    // so on, so forth...
}

public class Repository<T> : IRepository<T> where T : class, new()
{
    public Repository(DbContext context)
    {
        _context = context;
    }

    private readonly DbContext _context;

    public T ReadOne(object key)
    {
        return _context.Set<T>().Find(key);
    }
}

In questo modo, mantieni il tuo contesto pulito e devi solo preoccuparti di aggiungere nuove configurazioni di entità ad esso, quando è necessario. Se si utilizza EF6, esiste un metodo chiamato AddFromAssembly che consente di aggiungere le configurazioni da un assieme. Ciò ti evita di modificare DbContext ogni volta che aggiungi una nuova entità.

Suggerirei di cercare in un contenitore DI in quanto semplificherebbe enormemente il lavoro richiesto per mettere insieme le cose. È possibile ordinare la configurazione DAL con 2 o 3 righe di codice.

    
risposta data 22.02.2014 - 23:51
fonte

Leggi altre domande sui tag