Альбахари пишет в «C# 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.
Подходит ли этот подход или мне нужно пересмотреть его на основе описания Альбахариса?