Почему код first / EF использует nvarchar (4000) для строк в необработанной команде SQL?

] По сути, у меня есть таблица с почтовыми индексами. Поле 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) занимает полсекунды, тогда как запрос с правильной областью видимости выполняется намного быстрее (и меньше операций чтения).

Любая помощь / совет приветствуются.

7
задан Nicholas H 30 June 2011 в 17:45
поделиться