C# 一个实体对象不能被多个IEntityChangeTracker实例引用
我使用EF作为ORM 我在每个请求上都处理C# 一个实体对象不能被多个IEntityChangeTracker实例引用,c#,asp.net,entity-framework,caching,C#,Asp.net,Entity Framework,Caching,我使用EF作为ORM 我在每个请求上都处理objectContext 我将实体保存在缓存层中,因为我的服务会获得大量流量 对于从缓存中获取的某些实体,我有时会得到错误objectContext已被释放 我已将此代码添加到从缓存检索的元素中 if(maMDBEntities.Entry(group.State==EntityState.Detached) { maMDBEntities.Groups.Attach(组); } 但现在我有时会犯这样的错误: 一个实体对象不能被多个IEntityCh
objectContext
我将实体保存在缓存层中,因为我的服务会获得大量流量
对于从缓存中获取的某些实体,我有时会得到错误objectContext已被释放
我已将此代码添加到从缓存检索的元素中
if(maMDBEntities.Entry(group.State==EntityState.Detached)
{
maMDBEntities.Groups.Attach(组);
}
但现在我有时会犯这样的错误:
一个实体对象不能被多个IEntityChangeTracker实例引用
使用
Attach()
从一开始就是一个不正确的解决方案吗?正如我们在您的另一个问题()中告诉您的,在将实体附加到另一个上下文之前,您必须先分离实体
如果maMDBEntities
是一个新上下文(而不是加载数据的上下文),则从上下文的角度来看,EntityState不会“附加”。所以你的支票不够
对于未加载实体的上下文,此
maMDBEntities.Entry(group).State==EntityState.Distached
将始终为真。为什么我的检查不够?因为:一个实体对象不能被多个EntityChangeTracker实例引用。
您在那里做的工作不干净。拆下它,你就没事了。所以我的登记毫无意义。我懂了。因此,总结一下我需要做的事情:1)EnableProxy=false 2)通过对每个实体引用使用Include()
强制进行即时加载3)分离每个实体引用?我是不是漏掉了什么,或者有什么步骤是多余的?我想就这些。您可以尝试使用AsNonTracked()
-这将加载和分离实体。