我注意到在使用Find()
方法時實體框架生成了一些效率低下的查詢。例如,這裏是我的C#代碼。實體框架在使用Find()時生成效率低下的選擇
Model model = unit.Repository.DbSet.Find(model.ID);
生成查找()查詢
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]
這似乎是運行完全是另外一個選擇查詢,這是不必要的。以下是使用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()
生成兩個選擇? 方法應該避免使用Find()
方法嗎?
您是如何評估查詢效率低下的? SQL服務器中的查詢執行引擎可能會優化它。 – 2012-07-05 15:36:58
這個問題可以幫助:http://stackoverflow.com/questions/7822877/why-does-the-entity-frameworks-dbcontext-find-generate-a-query-with-select-to – ken2k 2012-07-05 15:47:56
@LadislavMrnka我正在使用MiniProfiler的ASP MVC – 2012-07-05 17:20:20