私は、私はメモリにこれらのオブジェクトを保持しないEF6は、マップされたDBタイプの主キーに対してオブジェクトを自動的にチェックできますか?
public void PersistToDB<T>(T object)
{
using(var dbContext = ...)
{
//if(dbContext.Set<T>.Any(x => x.PrimaryKeyMatches(object))...
}
}
...外部ソースが私を送信するとき、私はこのような仕事をしたいDBを永続化するために、オブジェクトと呼ばれる一般的な方法を持っていますINSERTまたはUPDATEのどちらかを保存するだけです。私の問題は、オブジェクトが存在するかどうかを見つけるためにdbContext.Set<T>.Any(x => x.id == object.id)
またはdbContext.Set<T>.Find(object.id)
を行うことができますが、検索するフィールドを知る必要があります。 EFはどのフィールドがT
のPKを定義しているかを知っているので、object
を渡すことができ、私のために自動的にこれを行うか、私にAny
に渡すことができるデリゲートを提供します。
dbContext.Entry(object)
を呼び出すと、私はそれを理解し、...私がやりたいことではなく、ローカルコピーが保持されていないとして指定されたオブジェクトがDetached
状態である私に教えてくれる、ないを行います。
きちんとしたジェネリック実装を損なうタイプ固有のコードを書かなくても、私ができることは何ですか?
編集:Generic Way to Check If Entity Exists In Entity Framework?の内容に基づいていますが、これは多くがカバーされていると思います。私が実際に務めているのは、委任/ ACtionを作成する方法です。Any(x => func(x))
リフレクションを使用せずに、またはすべてのエンティティの主キーを定義する基本クラス/インターフェースを使用せずにこれを行う方法はないと思います。 – DavidG
私はEFにプライマリキーが何であるかを教えているので(データアノテーションではなくFluent APIを使用しています)、知っておく必要があります。実際に特定の操作について知っていないのですか? –
私はそれが知っていると思うが、あなたが尋ねることを期待していない!多分これが助けになるでしょうか? http://stackoverflow.com/a/6019273/1663001 – DavidG