我有一个表,其中有一个varchar
列,我正在使用Entity Framework在WHERE
子句中使用此列。
Entity Framework生成的查询带有N''
,因此无法使用列上的索引。 有没有办法强制Entity Framework生成varchar
查询而不是nvarchar
查询?
我有一个表,其中有一个varchar
列,我正在使用Entity Framework在WHERE
子句中使用此列。
Entity Framework生成的查询带有N''
,因此无法使用列上的索引。 有没有办法强制Entity Framework生成varchar
查询而不是nvarchar
查询?
varchar
即可)。string
对象始终是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
这个网页是关于Microsoft .NET Framework中Entity Framework的EntityFunctions类的说明。该类提供了一组可用于查询表达式中的常规数学函数和日期时间函数的静态方法。使用这些方法可以在LINQ to Entities查询中进行转换、聚合、比较和处理数据。
var myTable = modelBuilder.Entity<MyEntityType>(); myTable.Property(x => x.TextField).HasColumnType("varchar(8)");
- Rossco