7

我有一个带有varchar列的表,并且我正在使用实体框架在WHERE子句中使用此列。

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

4

2 回答 2

7

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

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

[Column(TypeName = "varchar")]
public string YourColumnName
{
    get;
    set;
}
于 2013-03-12T12:04:18.040 回答
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

于 2016-12-19T22:50:46.207 回答