チェックアイテムはエンティティフレームワーク4.1に挿入されていません
-
22-10-2019 - |
質問
私はエンティティフレームワークを使用しており、コードの一部はデータベースに100のエンティティを配置したいと考えています。私が挿入しているエンティティのいくつかは多くの関係を持っているので、新しいアイテムのみを挿入していることを確認したいと思います。 DBの既存のものを簡単に確認するのは簡単ですが、現在のセッションに既に挿入して100個のアイテムを維持している場合は、繰り返されるアイテムが得られます。
問題は、主要なキーは自動生成だけであり、テーブルの一意性は、EFではサポートされていないユニークな列から来ています。 EF 4.1でセッションのアイテム部分をまだ挿入していないかどうかを確認するにはどうすればよいですか? DBContextでFindメソッドを見ましたが、使用できないPrimayキーが必要です。私が4.1を使用していることを考えると、私もDBContextに固執しています。これを確認するための一般的な方法を持つにはどうすればよいですか?
解決
EFを使用する場合は、エンティティのユニークな識別としてPKに固執する必要があります。そうしないと、開発の経験はかなり悪いでしょう。
現在のコンテキストで同じアイテムを既に処理しているかどうかを確認する場合:
bool exists = context.YourDbSet.Local.Any(x => x.UniqueId == someId)
エンティティの状態を確認する必要がある場合:
EntityState state = context.Entry(entity).State;
データベースの使用にエンティティが存在するかどうかを確認する必要がある場合:
YourEntity entity = context.YourDbSet.SingleOrDefault(x => x.UniqueId == someId);
最後のステートメントは、実際には同時システムの最良の方法ではありません。なぜなら、それを呼び出すとき、エンティティは存在する必要がないが、電話すると SaveChanges
他のプロセスはすでにエンティティを挿入できます。それに対処する簡単な方法はありません。
所属していません StackOverflow