我有一个带有varchar
列的表,并且我正在使用实体框架在WHERE
子句中使用此列。
实体框架生成查询,N''
因此无法使用列上的索引。有没有办法强制实体框架生成varchar
查询而不是nvarchar
一个?
我有一个带有varchar
列的表,并且我正在使用实体框架在WHERE
子句中使用此列。
实体框架生成查询,N''
因此无法使用列上的索引。有没有办法强制实体框架生成varchar
查询而不是nvarchar
一个?
它实际上取决于您如何构建 EF 模型,如果您使用它的设计器,您可以为每列指定所需的数据类型(在您的情况下,只需设置varchar
并完成)。
如果您使用的是代码优先方法,则必须使用适当的属性装饰表示该列的属性(string
.NET 中的对象始终是 Unicode,因此nvarchar
默认情况下会映射),只需执行此操作(使用数据注释,如果您正在使用StringAttribute
然后将其IsUnicode
属性设置为false
):
[Column(TypeName = "varchar")]
public string YourColumnName
{
get;
set;
}
您可以使用 EntityFunctions.AsNonUnicode(string) 方法,因此 EF 不会将字符串值作为 nvarchar 传递。我在使用 EF 5 和 EDMX 时遇到了同样的问题,其中 Oracle 数据库忽略了 varchar2 列索引,这对我有用。
var q = (from TableClass t in TableName
where t.varchar2Column == EntityFunctions.AsNonUnicode(someText));
MSDN 参考:https ://msdn.microsoft.com/pt-br/library/system.data.objects.entityfunctions(v=vs.110).aspx