Frage

Im Anschluss an einem SO dicsussion hier , ich habe teilweise Klassen implementiert, um Datetime-Werte für meine Erstellungs- und Änderungsdatenbankfelder in einem Konstruktor Standard zu erstellen.

Das Problem ist jetzt, dass meine Datenbank mehr als 100 Tabellen hat, und 75+ von ihnen haben die gleiche Grundstruktur, die eine Erstellt und eine Modified Spaltendefinition enthält.

So .. Stattdessen 75+ Teilklassen zu schaffen, die ich halten müssen, ist es eine Möglichkeit, eine Basisklasse erstellen, die alle EF Typ erbt von, die den Standard-Konstruktor erbt die Datetime-Werte aufzufüllen für Erstellungs- und Änderungs ?

EDIT: Bemerkenswert ist, dass ich bin mit EF 4.0

War es hilfreich?

Lösung

Sie können natürlich auch Ihre eigene Basisklasse angeben sowohl mit EF4 und EF1, obwohl es viel einfacher, mit EF4 ist. Rechtsklick auf die Entwurfsoberfläche, und Sie sollten eine Option, einen Code-Generierung Artikel hinzuzufügen. Wählen Sie den ADO.Net Entitätsobjekt Generator. Dies wird eine T4-Datei zu einem Projekt (.tt Erweiterung), die angibt, die Template-Klassen Ihrer Unternehmen aus dem Modell zu erzeugen, zu nutzen. Um eine andere Basisklasse angeben, Blick ins Innere es für eine Zeile wie

Private Function BaseTypeName(ByVal entity As EntityType, ByVal code As CodeGenerationTools) As String
    Return If(entity.BaseType Is Nothing, "EntityObject", MultiSchemaEscape(DirectCast(entity.BaseType, StructuralType), code))
End Function

Ersetzen EntityObject mit Ihrer Basisklasse. Beachten Sie, dass, wenn Sie diese Vorlage verwenden dann Ihre Basisklasse von System.Data.Objects.DataClasses.EntityObject erben müssen -. Sie POCO Vorlage stattdessen verwenden könnte, aber das wird wahrscheinlich genug für Sie

Andere Tipps

Sie können sicher EF sagen eine Basisklasse für Ihre Entitäten zu verwenden (es ist direkt im Designer als Eigenschaft für das Unternehmen) ... aber wenn Sie sicher, dass der Standardwert für dieses Feld machen wollen, vielleicht könnten Sie Haken in die beiden Ereignisse auf dem Objectsaving und ObjectMaterialized.

http://msdn.microsoft. com / en-us / library / system.data.objects.objectcontext.savingchanges.aspx

http://msdn.microsoft. com / en-us / library / system.data.objects.objectcontext.objectmaterialized.aspx

Sie könnten diese Möglichkeiten nutzen den Standardwert (e) zu injizieren, die Sie verwenden möchten. Also in Ihrem Saving Handler, zum Beispiel, könnten Sie die Object auf dem Kontext prüfen, ob der Zustand des jeweiligen Unternehmens EntityState.Added ist, dann stellen Sie die Erstellungs- und Änderungsdaten wie gewünscht.

Alternativ kann, wie angedeutet, gibt es einen Grund den Standardwert für die Spalte in SQL Server kann nicht nur GetDate sein ()? (Vorausgesetzt, dass Sie SQL Server verwenden) ....

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top