我按照这里描述的方式使用实体框架: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.
我究竟做错了什么?
3 回答
我猜
ObjectContext
在你达到using
陈述之前就被处理了 . 您链接的问题表明您将上下文存储在HttpContext.Items
或HashTable
中 . 如果您通过using
将所有调用包装到UnitOfWork.Current
,则只有第一个块可以正常工作 - 所有其他将从HttpContext
或HashTable
获得处置上下文 .我可能错了,但是我想到的第一件事就是
UnitOfWork.Current
可能会返回已经处理好的工作单元 .想象一下以下代码:
问题归结为
UnitOfWork.Current
到底是做什么以及应该做什么 . 它应该在每次访问时创建一个新对象吗?它应该保留参考,除非它被处置?这并不明显,你可能会对此感到困惑 .嗯,错误说明了一切 . 在您的任何
**using** (IUnitOfWork uow = UnitOfWork.Current)
之后,您的"global"上下文被处理掉 . 因此,任何访问它的尝试都将导致错误 .