Автоматическая проверка в EF - это странная особенность - мне это не нравится. Вы можете прочитать эту статью , чтобы найти некоторую информацию о том, как проверить только выбранные свойства, но я ожидаю, что вы должны запустить эту проверку вручную и отключить глобальную проверку, вызвав:
context.Configuration.ValidateOnSaveEnabled = false;
Ваша проблема с NonMappedAttribute
интересна. Я не углубился в реализацию валидации в EFv4.1, но если реализация построена на тех же правилах, что и обычная валидация на основе аннотаций данных, она использует только атрибуты, полученные из ValidationAttribute
- NotMappedAttribute
, а не из ValidationAttribute
.
Это еще одна проблема такой реализации - она объединяет определение и проверку соответствия, но эти две функции не одинаковы и не должны реализовываться одним и тем же API.
@ alun удалил свой ответ - правильный ответ на ваш вопрос. Ваша проверка принадлежит модели представления, зависящей от операции, которую выполняет пользователь. Это не относится к модели постоянства. Зачем? Именно из-за вашей текущей проблемы - модель постоянства может содержать только один набор проверки, и каждая операция в вашем приложении должна обеспечивать выполнение критериев проверки для этого набора = вы должны убедиться, что Password
и ConfirmPassword
заполнены, даже если ваша текущая операция не требует этого => проблема.