Entity Framework - Аннотации данных

Использование MVC3 и Entity Framework.

Я пытаюсь получить подтверждение, вытекающее из модели данных

Вопрос: при сохранении структуры сущностей, как я могу автоматически вставить тег [MetadataType ниже для моего класса друзей?

[EdmEntityTypeAttribute(NamespaceName="ModelValidationTestModel", Name="Person")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
[MetadataType(typeof(Person_Validation))] // I want EF to put this line in automatically
public partial class Person : EntityObject

...

[Bind(Exclude="PersonID")]
public class Person_Validation
{
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public int Age { get; set; }
    [Required]
    public string Email { get; set; }
}

Используя пример из: http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

2 ответа

Решение

Аннотации / атрибуты данных запекаются во время компиляции, и вы не можете добавлять их динамически. Я бы порекомендовал вам избегать передачи / получения ваших моделей EF в / из представлений. Вы должны использовать модели представлений, которые являются классами, специально разработанными для нужд данного представления. Это те модели представлений, которые будут обрабатывать определенные виды проверки, такие как требуемые, формат,...). Затем вы можете использовать AutoMapper для отображения вашего контроллера между вашими моделями представления и EF-моделями.

Я думаю, что лучший вариант - не связываться с классом, сгенерированным EF. Вместо этого определите свой собственный частичный класс:

[MetadataType(typeof(Person_Validation))]
public partial class Person
{
   //rest of class may be empty
}

Вы можете сделать это в том же файле, что и класс Person_Validation, если хотите.

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

Другие вопросы по тегам