基本上我有一个带有邮政编码的表格。 zipcode字段定义为'char(5)'。我首先使用代码,所以我将这些属性放在ZipCode属性上:
[Key, Column( Order = 0, TypeName = "nchar"), StringLength(5)]
public string ZipCode { get; set; }
现在如果我在EF中查询这个:
var zc = db.ZipCodes.FirstOrDefault(zip => zip.ZipCode == "12345");
生成的SQL使用nvarchar(4000)来注入参数。咦?是因为“12345”在技术上是一个未知长度的字符串?在查询该表时,EF不应该足够聪明才能使用正确的“nchar(5)”吗?
我问,因为nvarchar(4000)查询需要半秒钟,而正确范围的查询要快得多(读取次数少)。
任何帮助/建议都将不胜感激。
答案 0 :(得分:2)
这是为了利用自动参数化。以下文章解释了一般概念以及为何使用nvarchar(4000)。
答案 1 :(得分:1)
您是否尝试过使用MaxLength属性? This article给出了EF如何解释各种数据注释属性的合理摘要。