3

我使用 EF 作为 ORM。

我处理objectContext每个请求。

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

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

我已将此代码添加到从缓存中检索的元素中

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

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

一个实体对象不能被多个 IEntityChangeTracker 实例引用。

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

4

1 回答 1

4

正如我们在您的另一个问题中告诉您的(EF::attach(entity) 将解决 objectContext 已被废弃吗?),您必须先分离实体,然后再将其附加到另一个上下文!

如果maMDBEntities是一个新的上下文(不是加载数据的那个),那么从这个上下文的角度来看,EntityState 不是“附加的”。所以你的支票是不够的。

对于未加载实体的上下文,这maMDBEntities.Entry(group).State == EntityState.Detached始终是正确的。

于 2013-02-06T09:54:55.937 回答