以下代碼是用物體框架6和物體框架加庫(期貨)撰寫的
using (var ctx = _contextCreator.PortalContext())
{
var q = "";
ctx.Database.Log = s => q =s;
var a = ctx.ArticleIcons.Take(1).Future();
var b = ctx.ArticleIcons.Take(3).Future();
var aResult = a.ToList();
}
這是“q”變數的輸出,用于輸出生成的 SQL 查詢。是否可以避免執行 4 個查詢,因為代碼中只有 2 個查詢?
SELECT TOP (1)
[c].[Id] AS [Id],
[c].[Name] AS [Name],
[c].[CssClass] AS [CssClass]
FROM [dbo].[ArticleIcons] AS [c]
-- Executing at 25.3.2022. 9:41:47 01:00
-- Completed in 29 ms with result: null
SELECT TOP (3)
[c].[Id] AS [Id],
[c].[Name] AS [Name],
[c].[CssClass] AS [CssClass]
FROM [dbo].[ArticleIcons] AS [c]
-- Executing at 25.3.2022. 9:41:47 01:00
-- Completed in 0 ms with result: null
Opened connection at 25.3.2022. 9:41:48 01:00
-- EF Query Future: 1 of 2
SELECT TOP (1)
[c].[Id] AS [Id],
[c].[Name] AS [Name],
[c].[CssClass] AS [CssClass]
FROM [dbo].[ArticleIcons] AS [c]
;
-- EF Query Future: 2 of 2
SELECT TOP (3)
[c].[Id] AS [Id],
[c].[Name] AS [Name],
[c].[CssClass] AS [CssClass]
FROM [dbo].[ArticleIcons] AS [c]
;
-- Executing at 25.3.2022. 9:41:48 01:00
-- Completed in 53 ms with result: SqlDataReader
Closed connection at 25.3.2022. 9:41:48 01:00
uj5u.com熱心網友回復:
由于以下原因,查詢被記錄了 2 次:
第一次,庫生成兩個查詢(不執行它們,只生成它們)。但是,要正確生成它,它必須呼叫記錄這兩個查詢的攔截器ReaderExecuting 和 ReaderExecuting。此步驟是強制性的,某些提供程式(例如MySql/custom 用戶代碼)更改查詢和引數。
第二次,組合查詢后,庫呼叫DbInterception.Dispatch.Command.Reader攔截器,該攔截器記錄組合查詢。
因此,雖然查詢由于限制已被記錄了 2 次,但在資料庫服務器中只執行了組合查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451611.html
