2013-04-12 46 views
6

我一直在尋找實施這些模式的項目,我正在努力。 UoW具有數據庫上下文,然後使用該上下文實例化多個存儲庫。我的問題是處理上下文。我見過的很多文章都將存儲庫設置爲IDisposable,然後他們處理上下文。這讓我困惑不已,我是否錯過了某些東西或者(在我的情況下)它是否應該是處理上下文的UoW?另外,我是否應該在我的存儲庫上實現IDisposable?工作單元,知識庫和IDisposable

感謝

克里斯

回答

9

是,工作的單位應實施IDisposable和處置方面,而不是倉庫。

這裏有一個例子:

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