Я работаю с базой данных, в которой дизайнеры решили пометить каждую таблицу столбцом IsHistorical. Правильное моделирование не учитывается, и я не могу изменить схему.
Это вызывает некоторые трения при разработке экранов CRUD, которые взаимодействуют со свойствами навигации. Я не могу просто взять Продукт и затем отредактировать его EntityCollection. Я должен вручную написать IsHistorical проверки повсюду, и это сводит меня с ума.
Дополнения также ужасны, потому что до сих пор я написал все ручные проверки, чтобы увидеть, просто ли добавлено мягкое удаление, поэтому вместо добавления дублирующегося объекта я могу просто переключить IsHistoric.
Я рассмотрел три варианта:
Изменение шаблонов t4 для включения проверок и синхронизации IsHistorical.
Перехватывать удаления и добавления в ObjectContext, переключать столбец IsHistorical и затем синхронизировать состояние объекта.
Подписаться на событие AssociationChanged и переключить там столбец IsHistorical.
Кто-нибудь имеет какой-либо опыт с этим или может порекомендовать самый безболезненный подход?
Примечание: Да, я знаю, это плохое моделирование. Я читал те же статьи о программном удалении, что и у вас. Воняет, я должен иметь дело с этим требованием, но я делаю. Мне просто нужен самый безболезненный метод работы с программным удалением без написания одного кода для каждого свойства навигации в моей базе данных.
Замечание # 2 Ответ LukeLed технически верен, хотя вынуждает вас использовать действительно плохую модель для бедных, без графов. Проблема заключается в том, что теперь мне нужно вырвать все «удаленные» объекты из графа и затем вызвать метод Delete для каждого. Это действительно не спасет меня так много ручного церемониального кодирования. Вместо того, чтобы писать ручные проверки IsHistoric, я собираю удаленные объекты и перебираю их.