为什么代码优先/ EF在原始SQL命令中对字符串使用'nvarchar(4000)'?

Nic*_*s H 7 entity-framework ef-code-first

基本上我有一个带有邮政编码的表格.zipcode字段定义为'char(5)'.我首先使用代码,所以我将这些属性放在ZipCode属性上:

[Key, Column( Order = 0, TypeName = "nchar"), StringLength(5)]
public string ZipCode { get; set; }
Run Code Online (Sandbox Code Playgroud)

现在如果我在EF中查询这个:

var zc = db.ZipCodes.FirstOrDefault(zip => zip.ZipCode == "12345");
Run Code Online (Sandbox Code Playgroud)

生成的SQL使用nvarchar(4000)来注入参数.咦?是因为"12345"在技术上是一个未知长度的字符串?在查询该表时,EF不应该足够聪明才能使用正确的"nchar(5)"吗?

我问,因为nvarchar(4000)查询需要半秒钟,而正确范围的查询要快得多(并且读取次数少).

任何帮助/建议将不胜感激.

Rob*_*ick 2

这是为了利用自动参数化。以下文章解释了一般概念以及为什么专门使用 nvarchar(4000)。

http://msdn.microsoft.com/en-us/magazine/ee236412.aspx