.NET MVC: Как определить поле ntext в Code-First для SQL CE? - PullRequest
7 голосов
/ 16 июня 2011

У меня есть следующая модель:

public class Blog
{
    public int BlogID { get; set; }
    public int CategoryID { get; set; }

    [MaxLength(70)]
    [Required]
    public string BlogTitle { get; set; }

    [Column(TypeName="ntext")]
    public string BlogContent { get; set; }
}

Я вручную установил поле BlogContent типа ntext (16 байт) в базе данных SQL CE4.

Однако каждый раз, когда я пытаюсь вставить текст длиной более 4000 символов, выдается следующая ошибка:

Проверка не удалась для одного или нескольких юридические лица. Смотрите 'EntityValidationErrors' собственность для более подробной информации

Я попытался установить аннотацию для [Column(TypeName="ntext")], но это не имеет значения. Когда я повторяю цикл по коллекции EntityValidationErrors, проблема вызвана BlogContent, и ошибка говорит:

Строка не может быть длиннее 4000 символов

Как я могу определить, что моя модель имеет поле ntext для BlogContent?

Кажется, что любые аннотации данных игнорируются; предполагается, что строка без MaxLength ограничена по умолчанию 4000 символами.

1 Ответ

21 голосов
/ 18 июня 2011

Я решил, вам нужно использовать:

[Column(TypeName="ntext")]
[MaxLength]
public string BlogContent { get; set; }

Подробности см. Здесь: http://www.cloudonedesign.com/Blog/Post/how-to-define-ntext-fields-using-code-first-in-net-30

Чтобы создать столбец ntext в базе данныхи чтобы валидация модели фактически знала, что длина строки может быть больше 4000 символов, мы должны использовать эти два элемента:

[Column(TypeName="ntext")]: это скажет Code-First сгенерировать поле ntext вбаза данных.

[MaxLength]: Используя конструктор по умолчанию, он принимает максимальную длину поля базы данных, а не угадывает максимальную длину строки, которая составляет 4000.Если это отсутствует или вы явно задаете максимальную длину, например [MaxLength(8000)], при проверке модели возникнут ошибки: «Максимальная длина строки составляет 4000 символов».

...