我使用EF作为ORM。
我在每个请求上都处理objectContext
。
我将实体保存在缓存层中,因为我的服务获得了大量流量。
我有时会从缓存中获取某些实体的错误objectContext already disposed
。
我已将此代码添加到从缓存中重新获取的元素
if (maMDBEntities.Entry(group).State == EntityState.Detached)
{
maMDBEntities.Groups.Attach(group);
}
但现在我有时会收到此错误:
IEntityChangeTracker的多个实例无法引用实体对象。
从一开始就使用Attach()
不正确的解决方案?
答案 0 :(得分:4)
正如我们在您的其他问题(will EF::attach(entity) will solve objectContext is already desposed?)中告诉您的那样,您必须在将实体附加到另一个上下文之前将其分离!
如果maMDBEntities
是新的Context(而不是加载数据的那个),则EntityState不会从此Contexts视点“附加”。所以你的检查是不够的。
对于未加载实体的上下文,此maMDBEntities.Entry(group).State == EntityState.Detached
始终为真。