Структура объекта + аннотация проверки - PullRequest
3 голосов
/ 25 мая 2011

Я хочу использовать аннотацию проверки.У меня уже есть модель, реализованная структурой сущности.Мне нужна проверка данных, и я знаю, что есть аннотация данных, которая очень хороша ... Но я действительно не знаю, как я могу использовать ее с правильной структурой сущностей.

Следует ли редактировать сущности?Или я должен написать отдельный класс?Или я должен написать класс, унаследованный от сущностей?

Можете ли вы сказать мне, как лучше использовать?

Я хочу написать как можно меньше кода.

Ответы [ 2 ]

14 голосов
/ 25 мая 2011

Способ справиться с этим - это сочетание частичных классов и специального атрибута, который позволяет вам присоединять метаданные к другому классу.

Структура сущностей уже помогает вам, генерируя все классы как частичные классы.Итак, если у вас в вашей модели есть сущность под названием «Настройки», EF создаст это:

public partial class Setting : INotifyPropertyChanging, INotifyPropertyChanged
{
    // Auto-gen Properties, methods, etc go here.
}

Это означает, что вы можете иметь любое количество других partial class Setting фрагментов в других файлах, что EF не будетнажмите, если / когда вы восстанавливаете этот код.Если вы хотите добавить к этому атрибуты проверки данных, необходимо выполнить два шага:

  1. Присоединить атрибут MetadataType к классу Setting.В теле этого частичного фрагмента класса не должно быть ничего, оно только там, чтобы связать атрибут.

    [MetadataType(typeof(SettingMetadata))]   
    public partial class Setting
    {
    }
    
  2. Создайте второй класс с тем же открытым полемимена как класс EF и связывают любые атрибуты проверки данных, которые вы хотите.Компилятор сопоставит поля класса метаданных с полями класса EF по имени и будет действовать так, как если бы метаданные, прикрепленные к вашему второму классу, также были в вашем первом классе.

    public class SettingMetadata
    {
        [Display(Name="Base Rate")]
        [Required]
        public decimal Rate
        {
            get;
            set;
        }
    
        [Display(Name = "Permit Payments")]
        public Boolean AllowPayments
        {
            get;
            set;
        }
    
        [Display(Name = "Base URL For Web Service")]
        [Required]
        [SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "Type must match linked metadata type.")]
        public string WebServiceUrl
        {
            get;
            set;
        }
    }
    

Как упоминалось в сообщении подавления FxCop, имя и тип полей должны совпадать между классом метаданных и соответствующим классом, чтобы это работало.

2 голосов
/ 25 мая 2011

Аннотации данных - это атрибуты валидатора, которые необходимо добавить в свойства сущности. Существует ряд стандартных атрибутов, или вы можете создавать собственные, если они не удовлетворяют вашим потребностям.

Проверьте эту ссылку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...