Почему код first / EF использует nvarchar (4000) для строк в сырой команде SQL? - PullRequest
7 голосов
/ 30 июня 2011

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

Буду признателен за любую помощь / совет.

Ответы [ 2 ]

2 голосов
/ 20 ноября 2012

Это позволяет использовать автоматическую параметризацию. В следующей статье объясняется общая концепция, а также почему конкретно используется nvarchar (4000).

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

1 голос
/ 29 июля 2011

Вы пытались использовать атрибут MaxLength ? В этой статье дается хорошее представление о том, как различные атрибуты аннотации данных интерпретируются EF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...