如何使用Entity Framework处理varchar列?

Sun*_*xit 7 entity-framework

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

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

Adr*_*tti 6

它实际上取决于你如何构建你的EF模型,如果你正在使用它的Designer,你可以为每一列指定所需的数据类型(在你的情况下只需设置varchar并完成).

如果您使用的是代码优先方法,则必须使用适当的属性装饰表示该列的属性(string.NET中的对象始终为Unicode,因此nvarchar默认情况下将映射),只需执行此操作(使用数据注释,如果你正在使用StringAttribute它的IsUnicode财产来false):

[Column(TypeName = "varchar")]
public string YourColumnName
{
    get;
    set;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用EntityFunctions.AsNonUnicode(string)方法,因此EF不会将字符串值作为nvarchar传递.我对EF 5和EDMX也存在同样的问题,其中Oracle数据库忽略了varchar2列索引,这对我有用.

var q = (from TableClass t in TableName
         where t.varchar2Column == EntityFunctions.AsNonUnicode(someText));
Run Code Online (Sandbox Code Playgroud)

MSDN参考:https://msdn.microsoft.com/pt-br/library/system.data.objects.entityfunctions(v = vs.110).aspx