Нет необходимости удалять DataContext/ObjectContext в EF?

Альбахари пишет в «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.

Подходит ли этот подход или мне нужно пересмотреть его на основе описания Альбахариса?

10
задан Volker von Einem 31 May 2012 в 09:07
поделиться