3 Stimmen

Definition von Datenkommentaren unter Verwendung von DbContext gegenüber Objectcontext im ersten Datenbankansatz

Ich bin mit der Datenbank ersten Ansatz mit Entity Framework, wenn ich auf der Standardvorlage arbeiten die Datenbanktabellen wurden mit dem ObjectContext zugeordnet, so dass ich verwendet, um #partial Klassen & [MetadataType (typeof), um die Daten-Annotation anwenden, zu erstellen, aber wenn ich mit der Dbcontext-Code-Generierung-Vorlage starten, um die Datenbanktabellen abzubilden, fand ich, dass es .tt-Ordner in meinem Modellbereich erstellen wird, wo ich finde, dass Ich kann die Daten-Annotation direkt auf die .cs-Klassen selbst anwenden, ohne dass ich partielle Klassen wie im Fall von objectcontext erstellen muss . Derzeit funktionieren die Datenkommentare gut, aber würde mein Ansatz verursachen mir Probleme, die ich nicht bewusst sind, und ich sollte partielle Klassen erstellen, wie ich verwendet, um mit dem Objectcontext zu tun ? BR

6voto

bricelam Punkte 26065

Im Allgemeinen sollten Sie den generierten Code nicht bearbeiten, da die von Ihnen vorgenommenen Änderungen bei einer erneuten Generierung überschrieben werden. Aus diesem Grund geben die meisten Generatoren partielle Klassen aus.

Das beste Verfahren für Ihre Situation wäre, eine neue Datei in Ihrer Lösung mit einer anderen partiellen Klassendeklaration zu erstellen. In dieser Datei fügen Sie die MetadataType Attribut zur Klasse und fügen Sie Ihre Validierungsattribute auf Eigenschaftsebene zur "Buddy"-Klasse hinzu (die Klasse, auf die im Attribut verwiesen wird). Auf diese Weise können Sie Validierungsattribute für die generierten Eigenschaften verwenden. Sollte sich Ihr Modell bzw. Ihre Datenbank ändern, können Sie Ihre Modellklassen trotzdem neu generieren, ohne dass sie verloren gehen.

Ihre neue Datei könnte zum Beispiel so aussehen:

[MetadataType(typeof(PersonMetadata))]
partial class Person
{
    // Add logic to the generated class in here.

    public string FullName
    {
        get { return FirstName + " " + LastName; }
    }
}

class PersonMetadata
{
    // Add attributes to the generated properties in here.

    [Required]
    public string FirstName { get; set; }
}

0voto

Adam Tuliper Punkte 29789

Erstellen Sie die gleichen partiellen Klassen, um Ihre Metadaten zu definieren ODER Sie können einfach Ihre bestehende Datenbank mit den Entity Framework Power Tools zurückentwickeln, so dass Sie POCO-Klassen haben. Dann können Sie die fluent API (Sie werden die Validierungen sehen, die sie für Sie hinzufügt) anstelle von Datenannotationen verwenden, um Ihnen eine serverseitige Validierung zu ermöglichen.

Wenn Sie Client-Seite wollen, dann können Sie immer noch gelten sie für Ihre Modelle, wie sie nicht jedes Mal, wenn Sie kompilieren regeneriert werden.

Ich würde Ihnen jedoch empfehlen, ViewModels zu erstellen und AutoMapper zu verwenden, um eine Zuordnung zwischen Ihren EF-Objekten und ViewModels herzustellen. Dann können Sie Ihre Annotationen direkt auf Ihre ViewModels anwenden.

0voto

Spiky Punkte 457

Ich verstehe Ihre Situation so, dass Sie Ihren "Database-First"-Stil in einen "Code-First"-Stil zurückverwandelt haben. Wenn Ihre Kontextklasse von DbContext erbt, befinden Sie sich jetzt im Code-First-Stil (es sei denn, es ist eine seltsame Mischform möglich, von der ich nichts weiß!).

In code-first gibt es IMO wirklich keinen Grund, partielle Klassen für Datenannotationen zu erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X