IEntityChangeTracker的多个实例不能引用实体对象

时间:2013-02-06 09:41:41

标签: c# asp.net entity-framework caching

我使用EF作为ORM。

我在每个请求上都处理objectContext

我将实体保存在缓存层中,因为我的服务获得了大量流量。

我有时会从缓存中获取某些实体的错误objectContext already disposed

我已将此代码添加到从缓存中重新获取的元素

if (maMDBEntities.Entry(group).State == EntityState.Detached)
{
    maMDBEntities.Groups.Attach(group);
}

但现在我有时会收到此错误:

  

IEntityChangeTracker的多个实例无法引用实体对象。

从一开始就使用Attach()不正确的解决方案?

1 个答案:

答案 0 :(得分:4)

正如我们在您的其他问题(will EF::attach(entity) will solve objectContext is already desposed?)中告诉您的那样,您必须在将实体附加到另一个上下文之前将其分离!

如果maMDBEntities是新的Context(而不是加载数据的那个),则EntityState不会从此Contexts视点“附加”。所以你的检查是不够的。

对于未加载实体的上下文,此maMDBEntities.Entry(group).State == EntityState.Detached 始终为真。