Есть ли способ переопределить nvarchar (max) с установленным значением maxlength, используя конфигурацию EF 4.2 codefirst? - PullRequest
4 голосов
/ 16 ноября 2011

По умолчанию EF 4.2 codefirst устанавливает для столбца базы данных за строковыми свойствами значение nvarchar (max).

По отдельности (для каждого свойства) я могу переопределить это соглашение, указав атрибут [MaxLength(512)].

Существует ли способ глобального применения конфигурации, которая это делает?Кажется, что api конфигурации в modelbuilder допускает только переопределения для каждой сущности, и что api конвенции для modelbuilder разрешает только удаления.Смотрите этот вопрос .

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Нет, глобальная конфигурация недоступна.Пользовательские соглашения были удалены из EF Code First на этапе CTP.

2 голосов
/ 16 ноября 2011

Я думаю, вы можете сделать это.Чуть выше вашего свойства в таблице модели добавьте атрибут StringLength.Так же, как следование.(Помните, что вам нужно будет включить использование System.ComponentModel.DataAnnotations;)

    [StringLength(160)]
    public string Title { get; set; }

Обновление

  • Прежде всего, вы не можете создатьиндекс по столбцу nvarchar (MAX).Вы можете использовать полнотекстовое индексирование, но не можете создать индекс для столбца, чтобы повысить производительность запросов.

  • С точки зрения хранилища нет никакой разницы между nvarchar (max) и nvarchar (N), когда N <4000. Данные хранятся в строках или на страницах с переполнением строк, когда нетпоместиться.Когда вы используете nvarchar (max) и храните более 4000 символов (8000 байт), SQL Server использует другой способ хранения данных - аналогично старому типу данных TEXT - он хранится на страницах больших объектов. </p>

  • По производительности - опять же, для N <4000 и (макс.) - различий нет.Ну, технически это влияет на оценку размера строки и может привести к некоторым проблемам - вы можете прочитать об этом здесь: <a href="http://aboutsqlserver.com/2010/08/18/what-is-the-optimal-size-for-variable-width-columns/" rel="nofollow"> Оптимальный способ для столбцов с переменной шириной

  • Что может повлиять напроизводительность системы - размер строки.Если у вас есть запросы к этой таблице SCAN, большой размер строки приведет к большему количеству страниц данных на таблицу -> больше операций ввода-вывода -> снижение производительности.Если это так, вы можете попробовать сделать вертикальное разбиение и переместить поле nvarchar в другую таблицу.

...