私は、次の一般的なリポジトリがあります。処分コンテキスト
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);
}
}
:これは、ビジネス層ここ
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 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();
}
}
}
を
このデザインでは、ビジネスクラスのコンストラクタではなく、内部のリポジトリのインスタンスを作成しているのでusing句を使用すると、リポジトリのdisposeメソッドがデフォルトで呼び出されることはありません。私の主な質問は、コンテキスト/リポジトリが廃棄されていることを確認する方法です。
コンストラクタではなく、各メソッド内部のusing句でリポジトリを作成できますが、よりエレガントな方法があるのだろうかと思います。
一般的なデザインについてもお気軽にお問い合わせください。
ルック(http://stackoverflow.com/questions/6987908/what-is-the-best-way-to-instantiate-and-dispose-dbcontext-in -mvc/6990244#6990244) – Eranga