Albahari 在“c# 4.0 in a nutshell”中写道:
> 尽管 DataContext/ObjectContext 实现了 IDisposable,但您(通常)可以在不释放实例的情况下逃脱。释放会强制释放上下文的连接——但这通常是不必要的,因为每当您完成从查询中检索结果时,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 的描述重新考虑?