メソッドを使用すると、EntityFrameworkで非効率的なクエリが生成されることに気づきましたFind()
。たとえば、これが私のC#コードです。
Model model = unit.Repository.DbSet.Find(model.ID);
Find()クエリを生成する
DECLARE @p0 int = 1
SELECT
[Limit1].[ID] AS [ID],
[Limit1].[UserID] AS [UserID],
[Limit1].[Started] AS [Started],
[Limit1].[Updated] AS [Updated],
[Limit1].[Completed] AS [Completed]
FROM ( SELECT TOP (2)
[Extent1].[ID] AS [ID],
[Extent1].[UserID] AS [UserID],
[Extent1].[Started] AS [Started],
[Extent1].[Updated] AS [Updated],
[Extent1].[Completed] AS [Completed]
FROM [dbo].[Table] AS [Extent1]
WHERE [Extent1].[ID] = @p0
) AS [Limit1]
不要な他のすべてのselectクエリを実行しているようです。SingleOrDefault()
メソッドを使用した出力は次のとおりです。
SingleOrDefault()クエリを生成する
DECLARE @p__linq__0 int = 1
SELECT TOP (2)
[Extent1].[ID] AS [ID],
[Extent1].[UserID] AS [UserID],
[Extent1].[Started] AS [Started],
[Extent1].[Updated] AS [Updated],
[Extent1].[Completed] AS [Completed]
FROM [dbo].[Table] AS [Extent1]
WHERE [Extent1].[ID] = @p__linq__0
Find()
2つの選択を生成する理由はありますか?Find()
その方法を支持してその方法を避けるべきSingleOrDefault()
ですか?