【发布时间】:2018-08-01 13:40:43
【问题描述】:
我有以下示例,我在 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 尝试将变量定义为被查询的属性类型?
【问题讨论】:
-
您是否使用了 ADO.NET EF 向导,或者您是否手动编写了类代码?通常情况下,如果您使用 EF 向导,它将确定类型,而不是在您的示例中进行装箱和拆箱。
-
在课堂上处理。我有一个实体类和配置类与数据库表关联。
-
请同时发布这些定义。
-
类属性:public int?状态 ID { 获取;放; } 配置:Property(p => p.StatusId) .HasColumnName("status_id"); HasOptional(p => p.Status) .WithMany() .HasForeignKey(p => p.StatusId);
标签: c# sql entity-framework indexing