Есть ли лучший способ выполнить проверку в Entity Framework 4, чем переопределение SavingChanges? - PullRequest
0 голосов
/ 21 октября 2010

Мне кажется немного неправильным проводить валидацию в вашем контексте, который является вашим уровнем данных.Для уровня данных иметь зависимость от проверки кажется немного задом наперед.Для меня имеет больше смысла, чтобы проверка выполнялась в бизнес-логике, и как только проверка будет завершена, сохраните изменения.Уровень данных должен опираться на тот факт, что данные действительны.

Вторая причина, по которой мне не нравится переопределение SavingChanges, заключается в том, что он кажется очень грязным и быстро заполняется кодом.Когда у вас есть сложный граф объектов, этот метод ОЧЕНЬ быстро станет очень грязным с большим количеством

if (entity is MyType)
{
    //perform MyType validation
}

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

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

Есть ли в любом случае, что вы могли бы предоставить доступ к репозиториям и выполнить проверку, не вставляя все в один метод SavingChanges?

1 Ответ

0 голосов
/ 21 октября 2010

Если ваш код некрасив, напишите более приятный код. :)

var entities = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified))
                                         .Select(ose => ose.Entity);
var errors   = entities.OfType<IMyValidationInterface>()
                       .SelectMany(e => e.Validate());

... и готово!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...