3

У меня есть свойство подкласса объекта, я хотел бы проверить, является ли оно нулевым.Программно подтверждать использование аннотаций данных?

Я не могу аннотировать его атрибутом [Required], потому что тогда парсер EF интерпретирует его по мере необходимости. Я только хочу, чтобы это требовалось для этого типа (это унаследованный объект).

Вещь Я использую ресурсы отображения в своем проекте, и я хочу, чтобы имя свойства и сообщение об ошибке извлекались из ресурсов.

Предприятие реализует IValidatableObject, поэтому я хотел бы добавить Validator.TryValidateObject и получить индивидуальные ошибки проверки автоматически, но для этого требуется экземпляр ValidationContext которого constructor я хочу использовать, берет Dictionary<object, object>, который я не уверен, что аргумент его требует. Я уверен, что это конструктор, который я ищу, потому что я ищу способ указать имя экземпляра и члена, чтобы валидатор автоматически извлекал переменные отображения.

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

В любом случае, я хотел бы спросить, как класс Validator получает отображаемое имя внутри? Есть ли что-либо из этой функциональности?
Другой вопрос: каким образом ValidationContext устанавливает MemberName внутренне? Могу ли я сам построить такой ValidationContext?

ответ

1

Похоже, что я не понимал, но свойство ValidationContext.MemberName - это чтение-запись.

Я закончил с использованием следующих:

public IEnumerable<ValidationResult> IValidatableObject.Validate(
    ValidationContext validationContext) 
{ 
    var context = new ValidationContext(this) { MemberName = nameof(BirthDate) }; 
    var dateResults = new List<ValidationResult>(); 
    if (!Validator.TryValidateValue(this.BirthDate, context, dateResults, 
    new[] 
    { 
     new RequiredAttribute 
     { 
     ErrorMessageResourceType = typeof(ValidationResx), 
     ErrorMessageResourceName = Resx.Required 
     } 
    })) 
    foreach (var dateResult in dateResults) 
     yield return dateResult; 
} 

Другой вариант я мог сделать, это установка свойства, как NotRequired в беглом API DbContext.OnModelCreating «s.

 Смежные вопросы

  • Нет связанных вопросов^_^