Entity Framework-Code Erste allgemeine Datenbankprüfungsfelder

8

Ich bin neu in Entity Framework, in der Vergangenheit habe ich Enterprise Library oder ADO.NET direkt verwendet, um Modelle zu Datenbanktabellen zuzuordnen. Ein Muster, das ich verwendet habe, besteht darin, meine allgemeinen Audit-Felder, die in jeder Tabelle in einer Basisklasse erscheinen, zu setzen und dann diese Basisklasse für jedes Objekt zu erben.

Ich mache zwei Schritte, um zwei der Felder zu schützen (Created, CreatedBy):

  1. Lassen Sie einen parameterlosen Konstruktor in der Basiseinheit privat und erstellen Sie einen zweiten Konstruktor, der Created und CreatedBy benötigt, die bei der Erstellung übergeben werden.
  2. Machen Sie die Setter privat, damit die Werte nicht geändert werden können, nachdem das Objekt erstellt wurde.

Basisklasse:

%Vor%

Geerbte Klasse:

%Vor%

Ich habe Probleme mit beiden erlebt. EF benötigt einen parameterlosen Konstruktor zum Erstellen von Objekten. EF erstellt keine Datenbankspalten mit einem privaten Setter.

Meine Frage ist, ob es einen besseren Ansatz gibt, um meine Ziele mit EF zu erreichen:

  1. Erfordern, dass die Werte für Created und CreatedBy bei Instanziierung gefüllt werden.
  2. Die Werte von Created und CreatedBy können nicht geändert werden.
Josh 24.05.2013, 11:51
quelle

2 Antworten

5

Sie könnten einen Kontext mit einem Konstruktor instanziieren, der eine Zeichenfolge createdBy akzeptiert. Dann in einer Überschreibung von SaveChanges() :

%Vor%

Mit SetAuditValues() als

%Vor%

Nachdem die Entitäten aus der Datenbank materialisiert wurden, werden die Werte nicht überschrieben, wenn jemand SetAuditValues aufruft.

    
Gert Arnold 24.05.2013 14:48
quelle
0

Sie sollten nicht versuchen, die Zugriffsrechte direkt auf Ihre Entitäten / Datenebene zu steuern, sondern sollten dies in Ihrer Anwendungsebene tun. Auf diese Weise haben Sie eine bessere Kontrolle darüber, was Benutzer tun können.

Auch sollten die Audit-Felder nicht in jeder Tabelle wiederholt werden, sondern Sie möchten Ihre Audit-Datensätze in einer anderen Tabelle speichern. Dies ist mit Code zuerst einfach:

%Vor%

Sie würden dann die Basisklasse mit dem Audit-Datensatz verknüpfen:

%Vor%

Und schließlich deine eigentlichen Entitäten

%Vor%

Sie können auf die Überwachungsdaten nicht zugreifen, indem Sie:

%Vor%     
pingoo 24.05.2013 12:15
quelle