Альбахари пишет в "С# 4.0 в двух словах":
<Р → Хотя DataContext/ObjectContext реализует IDisposable, вы можете (в общем) уйти, не удаляя экземпляры. Устранение принудительных связей контекста для утилизации - но это обычно не нужно, поскольку соединения L2S и EF близки автоматически, когда вы заканчиваете получение результатов запроса & Л; <
Это кажется неправильным, и FxCop также жалуется, если вы не занимаетесь тем, что является IDisposable.
У меня есть следующий код репозитория:
public abstract class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{ ...
public void Add(TEntity entity)
{
using (var dbContext = this.UnityContainer.Resolve<DbContext>())
{
dbContext.Set<TEntity>().Add(entity);
dbContext.SaveChanges();
}
}
...
public virtual IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> expression)
{
using (var dbContext = this.UnityContainer.Resolve<DbContext>())
{
return dbContext.Set<TEntity>().Where(expression).ToList().AsEnumerable();
}
}
...
Примечание. Я не возвращаю IQueryable - ленивая загрузка не должна играть роли. Resolve DbContext настроен как PerResolveLifetimeManager.
Является ли этот подход ОК или мне нужно пересмотреть это на основе описания Albaharis?