Я ищу решение для выполнения некоторой выборочной проверки подлинности объекта (для чего потребуется доступ к базе данных, проверка перекрестных позиций ...), когда пользователь сохраняет свои изменения на экране динамических данных, с Entity Framework.
Валидация более сложна, чем то, что я могу сделать с атрибутами (для этого требуется доступ к базе данных и т. Д.)Пользовательская расширенная проверка сущностей с динамическими данными
Можете ли вы перехватить вызов SaveChanges?
Я попытался переопределить ValidateEntity
в объекте DbContext, но Dynamic Data, похоже, не вызывает его (возможно, потому, что он использует внутренний ObjectContext, не уверен, почему), и переопределение SaveChanges тоже не помогает.
Я не вижу никакого события, которое я мог бы подписаться ...
documentation должен помочь:
проверки Настройки для отдельного поля данных пути переопределения OnValidate метода или обработки события Validate , которые вызывают при изменении любого поля данных. Этот подход позволяет добавить валидацию и бизнес-логику для отдельного поля. Этот подход больше , чем добавление валидации для отдельного поля. Полезно , когда одна и та же логика проверки может применяться к нескольким данным . Он также позволяет выполнять проверки проверки, которые включают в себя несколько полей.
Но я использую POCO Entity Framework 6 классов, так что нет OnValidate
метода, чтобы переопределить, и от того, что я прочитал это для LinqToSql, и я не могу найти Validate
события они упоминают.
Я попытался подписаться на SavingChanges
случае в конструкторе моего DbContext внутренней ObjectContext
, вызвать вручную в ValidateEntity
, но я не знаю, что делать с результатом. Если я выброшу DbEntityValidationException
(или ValidationException
, как предлагается в this article), ASPNET обрабатывает его как любое исключение (желтый экран).
Реализация IValidatableObject
не работает.
Я также попытался реализации моей DynamicValidator
, чтобы посмотреть, что происходит, но без успеха, он, кажется, обрабатывает исключение (если переопределить ValidateException
, и поставить точку останова, я это вижу), но это все еще клокотало до дефолта обработчик ошибок и отображает желтый экран. Я должен что-то упустить.
Итак, как вы должны выполнять комплексную проверку (кросс-поле, с запросами и т. Д.) На объектах перед сохранением в динамических данных/EF?
я согласен с этим утверждением, я также считаю, что бизнес-логика не должна быть соединена с каркасом объекта – Eldho
Это спорно. Возможно, объект домена может иметь проверку. До тех пор, пока ужасный шаблон «хранилища перед шаблоном EF» не используется ... – James
Согласен, но Dynamic Data не дает много вариантов проверки. Но проблемы не существует, проблема в том, что DbValidationException не поймано DynamicValidator (хотя документы и статьи, которые я нахожу, говорят, что это должно), поэтому я получаю желтый экран. Прямо сейчас я даже не пытаюсь иметь хорошую архитектуру, просто чтобы иметь что-то, что работает :( –