Soft Deletes (IsHistorical-Spalte) mit EntityFramework

Ich arbeite mit einer Datenbank, in der die Designer beschlossen, jede Tabelle mit einer IsHistorical-Bitspalte zu markieren. Es gibt keine Überlegung für eine ordnungsgemäße Modellierung und es gibt keine Möglichkeit, das Schema zu ändern.

Dies führt zu Reibungsverlusten bei der Entwicklung von CRUD-Bildschirmen, die mit den Navigationseigenschaften interagieren. Ich kann ein Produkt nicht einfach nehmen und dann seine EntityCollection bearbeiten. Ich muss überall manuell IsHistorical-Schecks schreiben, und das macht mich verrückt.

Ergänzungen sind auch schrecklich, weil ich bis jetzt alle manuellen Überprüfungen geschrieben habe, um zu sehen, ob eine Ergänzung nur vorläufig gelöscht wurde, sodass ich statt einer doppelten Entität nur IsHistoric umschalten kann.

Die drei Optionen, die ich in Betracht gezogen habe, sind:

Ändern der T4-Vorlagen, um IsHistorical-Überprüfungen und -Synchronisierungen einzuschließen.

Abfangen von Löschungen und Hinzufügungen im ObjectContext, Umschalten der IsHistorical-Spalte und anschließendes Synchronisieren des Objektstatus.

Abonnieren Sie das AssociationChanged-Ereignis, und schalten Sie dort die Spalte IsHistorical um.

Hat jemand Erfahrung damit oder könnte er den schmerzlosesten Ansatz empfehlen?

Hinweis: Ja, ich weiß, das ist schlechtes Modellieren. Ich habe dieselben Artikel über weiche Löschvorgänge gelesen, die Sie haben. Es stinkt, dass ich mich mit dieser Anforderung auseinandersetzen muss, aber das tue ich. Ich möchte nur die schmerzloseste Methode zum Behandeln von weichen Löschvorgängen, ohne den gleichen Code für jede Navigationseigenschaft in meiner Datenbank zu schreiben.

Anmerkung 2 Die Antwort von LukeLed ist technisch korrekt, obwohl sie Sie in ein wirklich schlechtes, graphenloses Mans-ORM-Muster zwingt. Das Problem liegt in der Tatsache, dass ich jetzt alle "gelöschten" Objekte aus dem Diagramm herausreißen und dann die Delete-Methode für jedes einzelne aufrufen muss. Das wird mir nicht wirklich so viel manuelle zeremonielle Kodierung ersparen. Anstatt manuelle IsHistoric-Prüfungen zu schreiben, sammle ich jetzt gelöschte Objekte und durchlaufe sie in einer Schleife.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage