39

と の間に大きな違いは.Find(id)あり.Where(x = >x.Id == id)ます.Find().Where()/.First()?

それ.Find()はより効率的だと思いますが、避けるべきほど効率的.Where()/.First()ですか?

私が尋ねる理由は、テストでジェネリック FakeDbSet を使用して偽の結果を簡単に実装できるようにするためです。これまでのところ、そのクラスを継承してカスタム実装を提供する必要があることがわかりまし.Find().Where()/.First()。その余分な作業を行う必要はありません。

4

1 に答える 1

53

ポイントはFind()、コンテキストのローカル キャッシュを検索することから始め、一致しない場合はクエリを DB に送信することです。

を呼び出すと、Where()常にクエリが DB に送信されます。

EF 4 では、によって生成される SQLFind()が複雑すぎて、場合によってはパフォーマンスの問題につながると考えていました。だから私はEF 5でもいつも使っています.EF 5でWhere()生成されたSQLを確認する必要がありますFind().

紙の上でFind()は、キャッシュを使用するため優れています。

于 2013-06-06T15:38:11.693 に答える