Почему структура сущностей не аннотирует некоторые необнуляемые столбцы по мере необходимости? - PullRequest
3 голосов
/ 08 июля 2011

Сначала я использую EF 4.1 с базой данных.

Пример таблицы:

CREATE TABLE dbo.Foo(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    Created datetime not null default(getdate()),
    Title varchar(80) not null

PRIMARY KEY CLUSTERED ([ID] ASC)
)

EF корректно загружает модель со всеми 3 столбцами как nullable = false.

Вывод из элемента генерации кода "ADO.NET DbContext Generator":

 public partial class Foo
 {
    public int ID { get; set; }
    public System.DateTime Created { get; set; }
    public string Title { get; set; }
 }

В MVC3 я генерирую FooController через контекст db и модель foo. Когда я поднимаю / Foo / Create и нажимаю «Создать» в пустой форме, это показывает ошибку проверки в поле «Создано», но не в «Заголовке».

Если я ввожу только «созданную» дату, я получаю исключение:

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

Исключением является "Поле заголовка обязательно для заполнения".

Я не уверен, почему он хорошо работает для одного столбца, но не для другого. Моим первым исправлением было добавление аннотации, однако код класса автоматически генерируется EF.

Единственное исправление, которое, по-видимому, работает, это использование класса частичных метаданных: ASP.NET MVC3 - аннотации данных с EF Database First (ObjectConext, DbContext)

Я могу добавить тег [Required] по желанию, однако это не нужно. Это ошибка в EF или я что-то упускаю?

1 Ответ

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

Это не ошибка, EF просто не добавляет эти атрибуты.Насколько я знаю, подход на основе базы данных (классы сущностей, сгенерированные дизайнером) даже не выполняет проверку.Ссылка, на которую вы ссылаетесь, является верным решением вашей проблемы.Принцип buddy-классов, которые содержат фактические метаданные, был введен в связи с тем, что вы не можете добавлять атрибуты к существующим свойствам в частичном классе.

Подход «сначала код» имеет встроенную функциональность для проверкиваши аннотации см .: Entity Framework 4.1 Validation .Другим решением при использовании базы данных сначала было бы создать собственный генератор кода, который применяет эти атрибуты T4 Templates и Entity Framework .

...