Entity Framework 6 (Code zuerst) Entity-Versionierung und Auditing

8

Ich untersuche Entity Framework 6.1.1 mit SQL Server 2008 R2.

Momentan erstelle ich meine Modelle und Datenbanken mit der Code-First EF-Funktion. Mein grundlegender Anwendungsfall ist das Erstellen eines Journals aller Änderungen an einer bestimmten Entität ( ID ist die Schlüsselspalte), um Auditoren dabei zu helfen, alle Änderungen und von wem vorgenommene Änderungen zu verfolgen. z.B.:

%Vor%

Unterstützt Entity Framework diese Art von Datenbankschema? Wenn ja, wie kann ich meine Modelle / Lösung einstellen, um dies zu erleichtern?

Die andere Alternative besteht darin, alle Aufrufe der SaveChanges() -Methode für DbContext abzufangen und alle Datenbankänderungen in eine separate Audit -Tabelle zu protokollieren, was jedoch das Abrufen von Informationen schwieriger macht.

Jede Hilfe beim Erstellen von Audit-Trails mit SQL Server und EF 6 wird sehr geschätzt.

    
TK. 20.02.2015, 11:16
quelle

3 Antworten

6

Ich habe den zweiten Ansatz verwendet, den Sie erwähnen, indem Sie die Methode dbContext SaveChanges () überladen:

%Vor%

Wenn ich also eine bestimmte Entität protokollieren möchte, rufe ich einfach die überladenen SaveChanges & amp; übergeben Sie eine UserId:

%Vor%

Ich habe auch ein benutzerdefiniertes Attribut DoNotLog , mit dem ich die Entitätseigenschaften dekoriere, die ich nicht protokollieren möchte. Ohne dies könnte die Protokollierung eine große Menge an Daten generieren, da jede Entitätsänderung gleich einem db-Eintrag ist.

%Vor%

Die GetAuditRecordsForChange -Methode prüft alle DoNotLog -Eigenschaften und gibt eine List<AuditLog> zurück, die in der AuditLogs-Tabelle gespeichert wird:

%Vor%     
markpsmith 20.02.2015 11:29
quelle
3

Sie können sich Entity Framework Extended ansehen. Es verfügt über Audit-Funktionen, mit denen ich alle Änderungen an Entitäten in XML protokolliert habe. Aus der Dokumentation:

  

Die Audit Log-Funktion erfasst die Änderungen an Entitäten jederzeit   Sie werden an die Datenbank gesendet. Das Überwachungsprotokoll erfasst nur die   Entitäten, die geändert werden, und nur die Eigenschaften für diese Entitäten   Das wurde geändert. Die Vorher- und Nachher-Werte werden aufgezeichnet.   In AuditLogger.LastAudit werden diese Informationen gespeichert und es gibt a   ToXml () -Methode, die es einfach macht, das AuditLog in xml zu verwandeln   einfache Lagerung.

     

Der AuditLog kann über Attribute auf den Entitäten oder über a angepasst werden   Fließende Konfigurations-API.

UPDATE:

Entity Framework Extended wird seit 2015 nicht mehr unterstützt. Bitte beachten Sie Entity Framework Plus für diese Funktion.

    
GraemeMiller 20.02.2015 11:45
quelle
0

Ich würde sagen, dass dies ein guter Kandidat für das in einer DDD-Architektur erwähnte Event-Sourcing-Muster ist. Sie ändern nie Ihre Entitätstabelle, sondern fügen immer ein.

Wenn Sie also eine bestimmte Version benötigen, spielen Sie einfach alle Ereignisse erneut ab und wenden sie auf die Entität von Version 0 bis zu der Version an, nach der Sie suchen. Skalierbarkeit kann mit Entity-Snapshots gelöst werden.

Der zweite Ansatz ist ebenfalls gültig.

Referenz: Ссылка

    
Hugo Marcelo Del Negro 14.06.2017 16:34
quelle