2008-09-25 11 views
5

Ich habe ein Projekt geerbt, das LLBLGen Pro für die DB-Schicht verwendet. Das DB-Modell erfordert, dass beim Löschen eines Eintrags ein Flag gesetzt wird (DeletedDate wird auf die aktuelle Zeit gesetzt). Der letzte Programmierer ignorierte diese Anforderung und verwendete reguläre Löschungen in der gesamten Anwendung.LLBLGen: Wie kann ich einen Eintrag softdelete

Gibt es eine Möglichkeit, den Code Generator dies automatisch zu tun oder muss ich jeden löschen Operator für die Entitäten überladen, die es erfordert?

Antwort

4

Ich implementierte dies in SQL Server 2005 mit INSTEAD OF-Trigger beim Löschen für jede Soft-Delete-Tabelle. Die Auslöser setzen das Lösch-Flag und führen eine Bereinigung durch. Das Schöne an dieser Lösung ist, dass sie Löschungen korrekt behandelt, die von jedem System ausgegeben werden, das auf die Datenbank zugreift. INSTEAD OF ist relativ neu in SQL Server, ich weiß, dass es ein Oracle-Äquivalent gibt.

Diese Lösung spielt auch gut mit unserem O/R-Mapper - ich erstellte Ansichten, die weich gelöschte Datensätze herausfiltern und diese zuordnen. Die Ansichten werden auch für alle Berichte verwendet.

+1

Sehr cooler Vorschlag - es scheint, dass es unabhängig von der spezifischen Wahl von ORM oder anderer DAL-Strategie nützlich wäre. –

2

Sie könnten eine benutzerdefinierte Aufgabe in LLBLG erstellen, die die für Sie überschreiben würde, wenn Sie Entitäten generieren. Auf der Website finden Sie Beispiele für Vorlagenstudios und Vorlagen.

0

Es hängt davon ab, ob Sie selbst-Wartung oder Adapter verwenden. Wenn Sie SS verwenden, müssen Sie die Vorlage ändern, damit sie das Flag für Sie setzt, anstatt die Entität zu löschen.

Wenn Sie einen Adapter verwenden, können Sie von DataAccessAdapter erben und die Löschmethoden überschreiben, um das Flag für Sie festzulegen, anstatt die Entitäten zu löschen.

Es ist in der Regel eine beschissene Lösung für die Leistung, da jede Abfrage dann "gelöschte" Entitäten herausfiltern muss - und weil die Selektivität in der "gelöscht" -Spalte nicht sehr hoch sein wird (alle Ihre "nicht gelöschten" Datensätze sind) null - ich denke, das wird die Mehrheit von ihnen sein) Indizierung es nicht viel Gewinn - Sie werden am Ende mit vielen Tabellen-Scans enden.

Verwandte Themen