我正在使用基于this blog post的通用存储库构建ASP.NET 4.0 MVC 2应用程序。
我不确定如何处理ObjectContext的生命周期 - 这是我的存储库类的典型方法:
public T GetSingle<T>(Func<T, bool> predicate) where T : class
{
using (MyDbEntities dbEntities = new MyDbEntities())
{
return dbEntities.CreateObjectSet<T>().Single(predicate);
}
}
MyDbEntities
是实体框架4生成的ObjectContext
。
.CreateObjectSet()
并创建/ dispose MyDbEntities
?如果没有,我该如何保留这个对象?IEnumerable<MyObject>
,如果我尝试在该方法范围之外执行CRUD操作,这是否会导致未定义的行为?答案 0 :(得分:4)
是的,可以在每个请求上创建一个新的对象上下文(并依次调用CreateObjectSet)。事实上,它是首选。和任何实现IDisposable的对象一样,你应该是一个好公民并处理它(你上面的代码正在做)。有些人使用IoC来控制作用于http请求的对象上下文的生命周期,但不管怎样,它都是短暂的。
对于你问题的第二部分,我想你在问另一种方法是否使用不同的数据上下文实例执行CRUD操作(如果我误解,请告诉我)。如果是这种情况,则需要将其附加到将执行实际数据库更新的新数据上下文。这是一件好事。另外,可以接受的是使用工作单元模式。