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

本文关键字:实例 引用 IEntityChangeTracker 对象 不能 实体 | 更新日期: 2023-09-27 17:58:01

我使用EF作为ORM。

我会根据每个请求处理objectContext

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

我有时会从缓存中得到一些实体的错误objectContext already disposed

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

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

但现在我有时会遇到这样的错误:

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

使用Attach()从一开始就是一个错误的解决方案吗?

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

正如我们在您的另一个问题中告诉您的那样(EF::attach(entity)会解决objectContext已经被解压缩吗?),在将实体附加到另一个上下文之前,必须先分离实体!

如果maMDBEntities是新上下文(而不是加载数据的上下文),则从上下文的角度来看,EntityState不是"附加"的。所以你的支票不够。

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