Мне кажется немного неправильным проводить валидацию в вашем контексте, который является вашим уровнем данных.Для уровня данных иметь зависимость от проверки кажется немного задом наперед.Для меня имеет больше смысла, чтобы проверка выполнялась в бизнес-логике, и как только проверка будет завершена, сохраните изменения.Уровень данных должен опираться на тот факт, что данные действительны.
Вторая причина, по которой мне не нравится переопределение SavingChanges, заключается в том, что он кажется очень грязным и быстро заполняется кодом.Когда у вас есть сложный граф объектов, этот метод ОЧЕНЬ быстро станет очень грязным с большим количеством
if (entity is MyType)
{
//perform MyType validation
}
Третья причина, по которой мне не очень нравятся это все дополнительные объекты валидатора, которые я должен был быпередать в конструктор контекста объекта.Я использую DI-фреймворк, но он по-прежнему кажется грязным.
Полагаю, у меня есть только эта проблема, потому что я позволяю людям использовать репозитории.Я мог бы добавить слой косвенности, и тогда им пришлось бы использовать своего рода DTO.Недостатком здесь является много дополнительной работы.Также должно иметь место постоянное сопоставление.
Есть ли в любом случае, что вы могли бы предоставить доступ к репозиториям и выполнить проверку, не вставляя все в один метод SavingChanges?