Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个实体对象不能被多个IEntityChangeTracker实例引用_C#_Asp.net_Entity Framework_Caching - Fatal编程技术网

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

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

我使用EF作为ORM

我在每个请求上都处理
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()
-这将加载和分离实体。