我有一个包含varchar
列的表,我正在使用Entity Framework在WHERE
子句中使用此列。
实体框架使用N''
生成查询,因此无法使用列上的索引。有没有办法强制实体框架生成varchar
查询而不是nvarchar
查询?
答案 0 :(得分:6)
这实际上取决于你如何构建你的EF模型,如果你正在使用它的Designer,你可以为每一列指定所需的数据类型(在你的情况下只需设置varchar
就可以了)。 / p>
如果您使用的是代码优先方法,则必须使用正确的属性修饰表示该列的属性(.NET中的string
对象始终为Unicode,因此它将映射nvarchar
默认情况下),只需执行此操作(使用数据注释,如果您使用StringAttribute
,则将其IsUnicode
属性设置为false
):
[Column(TypeName = "varchar")]
public string YourColumnName
{
get;
set;
}
答案 1 :(得分:5)
您可以使用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