EF 4 Pocoがすでにオブジェクトセットにいるかどうかを効率的に判断します

StackOverflow https://stackoverflow.com/questions/2985659

質問

私は初めて小さなプロジェクトでPocoのEF 4を試しています。リポジトリの実装では、新しい場合はリポジトリにPassed-in Pocoを追加するメソッドaddorUpdateを提供したいと思います(そうでなければ何もしません(SaveChangesが呼び出されたときに更新されたPocoが保存されるため)。

私の最初の考えはこれを行うことでした:

public void AddOrUpdate(Poco p)
{
    if (!Ctx.Pocos.Contains<Poco>(p))
    {
        Ctx.Pocos.AddObject(p);
    }
}

ただし、次の場合 NotSupportedException 下に文書化されているように サポートされていない非スカラー変数を参照してください (ボーナス質問:なぜそれがサポートされないのですか?)

削除するだけです Contains Addobjectの結果は、次のようになります InvalidStateException:

同じキーを持つオブジェクトは、すでにObjectStateManagerに存在しています。既存のオブジェクトは変更されていない状態にあります。オブジェクトは、追加された状態にある場合にのみ、ObjectStateManagerにのみ追加できます。

したがって、EF 4は、これがキーに基づいて複製であることをどこかで知っています。

addorupdateが呼び出されたときに、リポジトリが新しいまたは既存のオブジェクトのいずれかのPoCOを更新するためのクリーンで効率的な方法は何ですか?

私はオブジェクト自体にisnewフラグを携帯することを検討しましたが、私は実用的な限り永続性の無知を取り入れようとしています。

役に立ちましたか?

解決

見てみてください ObjectStateManager.TryGetObjectStateEntryメソッド, 、それは良い説明です このStackOverFlow Queston.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top