在.NET Entity Framework中使用字符串属性时,如何控制SQL查询参数的类型

时间:2012-01-22 14:25:07

标签: entity-framework-4

在数据库表上有一个char(2)类型的列。

当我在linq中使用参数,例如.Where(x => x.Code == code)时,SQL查询参数被转换为varchar(max),我真的希望它是char(2),以避免隐式转换。这是因为查询没有按照我想要的方式使用数据库的索引。

Property(c => c.Code)
            .HasColumnType("char")
            .IsFixedLength()
            .HasMaxLength(2);

代码优先映射如上所示。唯一影响翻译的是.HasColumnType("char")它似乎不会影响查询翻译,因为这会影响它是选择varchar(max)还是nvarchar(max)

我想到了两个解决方案,一个是更改数据库,以便使用int和查找而不是char代码,另一个是将代码转换为使用表达式。如果有更好的方法来控制映射到sql,我宁愿不做两件事。

1 个答案:

答案 0 :(得分:0)

我找到了实现这一目标的方法。

而不是使用.Where(x => x.Code = code)

我现在正在使用

var codes = new string[] { code }

...

.Where(x => codes.Contains(x.Code))

这会在查询中转换为常量而不是参数。