我有以下的通用存儲庫:處置語境
public class EFRepository<TEntity, TContext> : IRepository<TEntity, TContext>, IDisposable
where TEntity : class
where TContext : ObjectContext
{
protected TContext context;
public EFRepository(TContext context)
{
this.context = context;
}
//CRUD methods...
public void Dispose()
{
if (null != context)
{
context.Dispose();
}
}
}
這是從業務層
public class UserBLL : BaseBLL<User>
{
EFRepository<User, MyEntities> userRepo = null;
public UserBLL() : base()
{
//Context is created in the consructor of the base class and passed to repository
userRepo = new EFRepository<User, MyEntities>(Context);
}
}
這裏一類是在基礎業務類:
public class BaseBLL <TEntity>
where TEntity : class
{
protected MyEntities Context { get; set; }
public BaseBLL()
{
this.Context = DataAccessHelper.Context;
this.Context.MetadataWorkspace.LoadFromAssembly(typeof(TEntity).Assembly);
}
}
在這個設計中,由於我在業務類構造函數中創建了一個存儲庫實例,而不是在使用子句,版本庫的dispose方法在默認情況下不會被調用。我的主要問題是如何確保上下文/存儲庫處置。
我知道我可以在每個方法內的using子句中創建存儲庫,而不是在構造函數中,但我想知道是否有更優雅的方法。
隨意就一般的設計發表評論。
看看[這個答案](http://stackoverflow.com/questions/6987908/what-is-the-best-way-to-instantiate-and-dispose-dbcontext-in -mvc/6990244#6990244) – Eranga