3

EF entities私が書いたキャッシュレイヤーにいくつか保存します。それらをキャッシュから取得すると、「contextObject が破棄されました」というエラーが発生することがあります。contextObjectキャッシュからエンティティを取得した後、新しいものを添付したい。これはどのような副作用を引き起こす可能性がありますか? 既に添付されているエンティティを添付するとどうなりますか? パフォーマンス?

4

3 に答える 3

2

例外「同じキーを持つオブジェクトはすでにObjectStateManagerに存在します。ObjectStateManagerは同じキーを持つ複数のオブジェクトを追跡できません。」

Context.DbSet.Local()メソッドを参照して、Context内のすべてのオブジェクトを取得します。

于 2013-02-05T16:27:32.013 に答える
1

このようにしてみてください。

ObjectStateEntry entry;
    if(context.ObjectStateManager.TryGetObjectStateEntry(entity, out entry)) {
        return (entry.State != EntityState.Detached);
    }

この回答も確認してください。データ コンテキストに関連付けられたエンティティ

于 2013-02-05T16:36:45.447 に答える
0

オブジェクトが既にアタッチされているため、例外がスローされます (どれかはわかりません)。

コードで試してみてください。試すのはとても簡単です。それは私に起こりました。

ところで、使用を終了したらすぐに contextobject を破棄する必要があります。そうしないと、奇妙な動作が発生します(オブジェクトが更新されない、データベースで直接変更されたキャッシュされたオブジェクトが変更を反映しないなど)。

よろしく。

于 2013-02-05T16:23:10.687 に答える