Какова связь между DbEntityValidationResult и ValidationResult?

1

Может ли кто-нибудь объяснить взаимосвязь между классами System.Data.Entity.Validation.DbEntityValidationResult и System.ComponentModel.DataAnnotations.ValidationResult?

Объект IValidatableObject имеет дело с объектами ValidationResult которые могут использоваться для проверки объекта, использующего аннотации данных. В то же время при использовании объекта DataContext Entity Framework для хранения объекта объекты DbEntityValidationResult используются для сообщения ошибок проверки. Поэтому я задаюсь вопросом о точной взаимосвязи между ними. Объекты DbEntityValidationResult используются только при фактическом взаимодействии с базой данных?

И является ли проверка ComponentModel используемая EF внутренне, или две полностью независимые, за исключением того, что они оба полагаются на Data Annotations?

Теги:
validation
entity-framework

1 ответ

2
Лучший ответ

System.ComponentModel.DataAnnotations.ValidationResult - используется для объектов, которые используют аннотации данных. Класс ValidationResult содержит свойство с именами свойств, к которым применяется ошибка.

В основном инфраструктура Entity использует System.ComponentModel для проверки внутри своих собственных методов.

System.Data.Entity.Validation.DbEntityValidationResult - используется только Entity Framework. DbValidationError содержит ошибку для одного свойства всего проверяемого объекта.

DbEntityValidationResult на самом деле является частью сборки EntityFramework.

Когда Entity Framework проверки данных (что происходит в Validation метода ValidatableObjectValidator класса) в преобразования IEnumerable<DataAnnotaion.ValidationResult> в IEnumerable<DbValidationError>:

foreach (var validationResult in validationResults)
{
    if (validationResult == null)
    {
        continue;
    }
    // let treat null or empty .MemberNames the same way as one undefined (null) memberName
    var memberNames = validationResult.MemberNames == null || !validationResult.MemberNames.Any()
                            ? new string[] { null }
                            : validationResult.MemberNames;

    foreach (var memberName in memberNames)
    {
        yield return new DbValidationError(memberName ?? propertyName, validationResult.ErrorMessage);
    }
}

В результате для каждого имени в ValidationResult.MemberNames будет создано одно DbValidationError (с некоторыми исключениями для особых случаев, таких как null или empty.MemberNames или пустые имена в.MemberNames)

Ссылки на источники:

ValidatableObjectValidator.cs

DbHelpers.cs

  • 0
    Знаете ли вы, используется ли EF-проверка ComponentModel для внутренних целей, или они полностью независимы, за исключением того, что они оба используют аннотации данных?
  • 0
    Я думаю, что они независимы, но позвольте мне проверить.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню