簡體   English   中英

使用SQL_VARIANT的實體框架

[英]Entity Framework using SQL_VARIANT

在下面的示例中,我在INT字段上查詢實體。 以下是我的情況的示例:

int test =1;
var listExample= _db.EntityTable.Where(x => x.StatusId == test).ToList();

當我查看生成的SQL時,它使用SQL_VARIANT作為變量聲明,因此未在表上正確使用索引,從而導致整個表掃描。

下面是生成的SQL的示例:

DECLARE @p__linq__0 AS SQL_VARIANT;
SET @p__linq__0 = NULL;

SELECT 
[Extent1].[id] AS [id], 
FROM [dbo].[tbl_table_example] AS [Extent1]
WHERE [Extent1].[status_id] = @p__linq__0

無論如何,有沒有讓EF嘗試將變量定義為查詢的屬性類型?

我認為這只是Visual Studio IntelliTrace生成與實際執行的SqlCommand相對應的SQL批處理方式的錯誤或限制。 我復制了此內容,但查看了通過SQL事件探查器發送的SQL,它看起來是正確的:

exec sp_executesql N'SELECT [x].[Id], [x].[StatusId]
FROM [EntityTable] AS [x]
WHERE [x].[StatusId] = @__test_0',N'@__test_0 int',@__test_0=1

EF日志記錄還會報告正確的參數類型:

SELECT
    [Extent1].[Id] AS [Id],
    [Extent1].[StatusId] AS [StatusId]
    FROM [dbo].[EntityTables] AS [Extent1]
    WHERE [Extent1].[StatusId] = @p__linq__0


-- p__linq__0: '1' (Type = Int32, IsNullable = false)

-- Executing at 8/1/2018 9:41:32 AM -05:00

-- Completed in 20 ms with result: SqlDataReader

而IntlliTrace輸出(請注意第一行的警告)是:

--Type and value data was not available for the following variables. Their values have been set to defaults.
DECLARE @p__linq__0 AS SQL_VARIANT;
SET @p__linq__0 = NULL;

SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[StatusId] AS [StatusId]
    FROM [dbo].[EntityTables] AS [Extent1]
    WHERE [Extent1].[StatusId] = @p__linq__0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM