3

私はEFをORMとして使用しています。

objectContextリクエストごとに処分します。

私のサービスは大量のトラフィックを受け取るため、エンティティをキャッシュ レイヤーに保存します。

objectContext already disposedキャッシュから取得した一部のエンティティでエラーが発生することがあります。

キャッシュから取得した要素にこのコードを追加しました

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

しかし、今では時々このエラーが発生します:

エンティティ オブジェクトは、IEntityChangeTracker の複数のインスタンスによって参照できません。

Attach()そもそも間違ったソリューションを使用していましたか?

4

1 に答える 1

4

他の質問で説明したように ( will EF::attach(entity) will solve objectContext is already deposed? )、別のコンテキストにアタッチする前にエンティティをデタッチする必要があります!

maMDBEntities新しいコンテキスト (データをロードしたものではない) である場合、EntityState はこのコンテキストの観点からは「接続」されていません。したがって、あなたの小切手は十分ではありません。

これmaMDBEntities.Entry(group).State == EntityState.Detachedは、エンティティをロードしなかったコンテキストに対して常に当てはまります。

于 2013-02-06T09:54:55.937 に答える