【发布时间】:2012-06-05 12:40:45
【问题描述】:
Albahari 在“c# 4.0 in a nutshell”中写道:
> 尽管 DataContext/ObjectContext 实现了 IDisposable,但您可以(通常) 在不处理实例的情况下离开。 Disposing 强制上下文的连接 处置——但这通常是不必要的,因为 L2S 和 EF 关闭了连接 每当您完成从查询中检索结果时自动
这感觉不对,如果您不处理 IDisposable 的东西,FxCop 也会抱怨。
我有以下存储库代码:
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 的描述重新考虑?
【问题讨论】:
标签: entity-framework repository repository-pattern idisposable