У меня есть следующий общий репозиторий:
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);
}
}
В этом проекте, поскольку я создаю экземпляр репозитория в конструкторе бизнес-класса, а не внутри предложения using, метод dispose из репозитория по умолчанию не вызывается.Мой главный вопрос заключается в том, чтобы убедиться, что контекст / репозиторий расположен.
Я знаю, что могу создать репозиторий в условии использования внутри каждого метода, а не в конструкторе, но мне интересно, есть ли более элегантный способ.
Не стесняйтесь комментировать и дизайн в целом.