Аннотации данных Entity Framework 5.x

Я использовал подход EF 4.x к базе данных. У меня есть файл edmx, и он сгенерировал класс C #, производный от EntityObject. У меня есть приложение ASP.NET MVC 4, которое использует сгенерированный класс в качестве модели. Проверка клиента, которая проверяет обязательные поля, работала нормально.

Теперь я перешел на EF 5 и использовал генератор DbContext, он генерирует класс POCO C #. Я обнаружил, что обязательная проверка поля больше не работает в EF 5.

Я думаю, проблема в том, что в генераторе EntityObject EF 4.x сгенерированный класс имеет атрибут [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]. Однако в классе POCO EF 5.x атрибуты аннотации данных не создаются. Таким образом, необходимая полевая информация теряется.

Итак, мои вопросы:

  1. Почему генератор EF 5.x DbContext не генерирует [Required] аннотации из файла edmx?
  2. Где лучше всего разместить эти аннотации к данным? Должен ли я изменить файл .tt для создания атрибута [Обязательный]? Или вручную написать частичный класс [MetadataType] и определить атрибуты аннотации данных в отдельном классе?



Ответы (2)


1) Не знаю почему. Я просто знаю, что подход Db-first не добавляет никаких аннотаций данных к свойствам.

2) Действительно создание отдельного частичного класса! Вот пример. Поскольку EF будет перезаписывать и восстанавливать все классы POCO каждый раз, когда вы обновляете свою модель, любые изменения (также аннотации данных) в этих классах будут потеряны ...

person Amin Saqi    schedule 20.08.2013
comment
Я обнаружил, что шаблон t4metadatatemplate.codeplex.com может генерировать класс MetadataType. Однако в конечном итоге я изменяю файл model.tt, просто добавляя атрибут [Required]. - person Hengyi; 21.08.2013

Возможно, вы найдете эту ссылку полезной. EF Validation Просто добавьте Класс метаданных с необходимой проверкой:

[MetadataType(typeof(UserMetadata))
public partial class User
{
  ...
}
public class UserMetadata
{
    [UserValidate("State")]
    public string State; 
   // etc.
}

надеюсь, это может помочь

person Waleed    schedule 07.11.2016