2017-05-09 3 views
2

私はASP.NET MVCアプリケーションを作成しています。EditまたはDetailsのような1つの項目を必要とするアクションの場合は、myDbContext.MyDbSet.Single(i => i.Id == id)またはmyDbContext.MyDbSet.Find(id)を使用する方が良いですか?後者はもっと短く、私の考えでは、Linqメソッドを必要とせずにクリーナーを使用していますが、ASP.NET MVCで読んでいるソースは前者を好むようです。Find()またはSingle()を使用してデータベースからアイテムを選択する方が良いですか?

実装を表示する方法が見つかりませんでしたが、推測しなければならない場合、Single()はおそらくどこかでFind()を使用しています。これは、より多くのメソッド呼び出しと多少劣る効率/パフォーマンスを示します。私の考えは正しいのですか?

+0

'.Find()'は 'List 'にのみ有効ですか? – EpicKip

+0

@Epic https://msdn.microsoft.com/en-us/library/gg696418(v=vs.113).aspx – CodeCaster

+0

正確に記録されていない場合、単一例外がスローされます。 Findはnull値を許可しません。パフォーマンスだけではありません。 –

答えて

4

Find()は最初にDbContextの第1レベルのキャッシュを検索します。ヒットがなければ、データベースに照会します。 Single()は常にデータベースに照会します。それに加えて、Find()は、エンティティが見つからなかった場合にnullを返します。 Single()は例外をスローします。したがって、Find()に相当するのはSingleOrDefault()です。

関連する問題