.Find()
メソッドについては、このMSDNリンクで次のように言及されています
コンテキスト内でエンティティが見つからない場合は、クエリがデータベースに送信され、そこでエンティティが検索されます。コンテキストまたはデータベースでエンティティが見つからない場合は、null が返されます。検索は、次の 2 つの重要な点でクエリの使用とは異なります。
• データベースへのラウンドトリップは、指定されたキーを持つエンティティがコンテキストで見つからない場合にのみ行われます。
• Find は、Added 状態のエンティティを返します。つまり、Find は、コンテキストに追加されたがまだデータベースに保存されていないエンティティを返します。
しかし、これは問題を引き起こす可能性がありますか? オブジェクトが追加状態としてマークされていたが、データベースに保存する前に例外が発生したとします。そのため、後でデータベースに保存されていない、追加された状態のオブジェクトが返される可能性があります。
2 番目の問題は、.Find がコンテキスト内でオブジェクトを見つけ、そのオブジェクトが見つかった直後にデータベース内で更新された場合、コンテキストのオブジェクト バージョンが古いものになる場合です。
では、 or.Find()
を使用して主キーに基づいて検索を行う代わりに、使用することで得られる利点は何ですか?.Where
.firstordefault(a=>a.primarykey ==id)