2013-04-12 14 views
6

Szukałem wdrożenia tych wzorców w projekcie, nad którym pracuję. UoW ma kontekst bazy danych, a następnie tworzy instancje wielu repozytoriów z tym kontekstem. Moje pytanie dotyczy pozbycia się kontekstu. Wiele artykułów, które widziałem, ma repozytorium jako IDisposable, a następnie pozbywają się kontekstu. To mnie zdezorientowało bez końca, czy ja coś przeoczyłem, czy (w moim przypadku) czy powinna to być właśnie UU, która pozbywa się kontekstu? Czy powinienem implementować IDisposable na moich repozytoriach?Jednostka pracy, repozytoria i IDisposable

Dzięki

Chris

Odpowiedz

9

Tak, jednostka pracy powinny wdrożyć IDisposable i rozporządzania kontekst, a nie repozytoriach.

Oto jeden z przykładów:

public interface IUnitOfWork : IDisposable 
{ 
    void Commit(); 
} 

public class EntityFrameworkUnitOfWork<TContext> : IUnitOfWork 
    where TContext : DbContext, new() 
{ 
    public EntityFrameworkUnitOfWork() 
    { 
     this.DbContext = new TContext(); 
     ConfigureContext(this.DbContext); 
    } 

    protected virtual void ConfigureContext(TContext dbContext) 
    { 
     dbContext.Configuration.ProxyCreationEnabled = false; 
     dbContext.Configuration.LazyLoadingEnabled = false; 
     dbContext.Configuration.ValidateOnSaveEnabled = false; 
    } 

    protected TContext DbContext { get; private set; } 

    public void Commit() 
    { 
     this.DbContext.SaveChanges();   
    } 

    public void Dispose() 
    { 
     this.Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!disposing) 
     { 
      return; 
     } 

     if (this.DbContext == null) 
     { 
      return; 
     } 

     this.DbContext.Dispose(); 
     this.DbContext = null; 
    } 
}