如何使用Entity Framework处理varchar列?

时间:2013-03-12 11:55:15

标签: entity-framework

我有一个包含varchar列的表,我正在使用Entity Framework在WHERE子句中使用此列。

实体框架使用N''生成查询,因此无法使用列上的索引。有没有办法强制实体框架生成varchar查询而不是nvarchar查询?

2 个答案:

答案 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