Vol*_*nem 10 entity-framework idisposable repository repository-pattern
Albahari在"c#4.0简介"中写道:
>尽管DataContext/ObjectContext实现了IDisposable,但您可以(通常)在不处置实例的情况下逃脱.处置强制上下文与dispose的连接 - 但这通常是不必要的,因为只要完成从查询中检索结果,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();
}
}
...
Run Code Online (Sandbox Code Playgroud)
注意:我没有返回IQueryable - 延迟加载不应该发挥作用.Resolve DbContext配置为PerResolveLifetimeManager.
这种方法是正确的还是我需要根据Albaharis描述重新考虑这个问题?
如果类暴露它,你应该总是调用dispose.该声明声称EF和L2S在完成操作时关闭连接 - 因为我知道该语句是正确的,但同时ADO.NET团队也关闭了Dispose方法中的连接,因此可能存在连接未关闭的情况.
| 归档时间: |
|
| 查看次数: |
6756 次 |
| 最近记录: |