我按照这里描述的方式使用实体框架:Entity framework uses a lot of memory
我意识到我需要使用"using“语句才能正确工作。当我这样做的时候:
using (IUnitOfWork uow = UnitOfWork.Current)
{
CompanyRepository rep = new CompanyRepository();
m_AllAccounts = rep.GetQuery().
Select(x => new Account(x)).ToList(); ///HERE I GET THE EXCEPTION
}在这个例子中,我得到了:
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.我做错了什么?
发布于 2011-05-16 20:16:55
我可能错了,但是我首先想到的是,UnitOfWork.Current可能会返回一个已经处理过的工作单元。
想象一下下面的代码:
void MethodA ()
{
using (IUnitOfWork uow = UnitOfWork.Current)
{
// do some query here
}
}
void MethodB ()
{
using (IUnitOfWork uow = UnitOfWork.Current)
{
// do another query here
}
}
MethodA (); // works OK
// now UnitOfWork.Current is disposed
MethodB (); // raises exception问题归结为UnitOfWork.Current到底做了什么,应该做什么。它是否应该在每次访问时都创建一个新对象?它是否应该保留一个引用,除非它被释放?这并不明显,您可能会对此感到困惑。
发布于 2011-05-16 18:42:03
好吧,这个错误不言而喻。在您的任何**using** (IUnitOfWork uow = UnitOfWork.Current)之后,您的“全局”上下文被释放。因此,任何访问它的尝试都将导致错误。
发布于 2011-05-16 20:05:24
我猜在您到达using语句之前,ObjectContext已经被处理掉了。您的链接问题显示您将上下文存储在HttpContext.Items或HashTable中。如果你用using包装了所有对UnitOfWork.Current的调用,那么只有第一个块会起作用--所有其他的调用都会从HttpContext或HashTable中得到释放的上下文。
https://stackoverflow.com/questions/6016025
复制相似问题