Beeinflusst, wie Entitätsklassen in EF 6-Code erstellt werden - zuerst aus der Datenbank

8

Wir haben EF 4.0 mit einem Datenbank-First-Ansatz unter Verwendung eines .edmx -Modells verwendet.

Wir aktualisieren jetzt auf EF 6.1.3 und untersuchen, ob wir mit oder ohne das .edmx -Modell arbeiten sollen. Wir wollen auf jeden Fall die Kontrolle über unser Datenbankschema behalten - also erstellen wir neue Tabellen usw. mit SQL-Skript und generieren dann das EF-Modell (entweder .edmx oder nur Codeklassen) aus der bestehenden Datenbank.

>

Während meiner Tests mit Visual Studio 2013 habe ich festgestellt, dass EF 6 die Klassen aus der vorhandenen Datenbank erstellt. Ich habe eine Klasse Customer , die dreimal mit einer Klasse Contact verknüpft ist - einmal für die DesignContact , einmal für die SalesContact und ein drittes Mal für die SupportContact . Diese werden als Spalten DesignContactId (INT) usw. in der Tabelle Customer gespeichert.

Sie können diese Klassen mit diesem T-SQL erstellen:

%Vor%

Beim Erstellen der Klassen aus der Datenbank sehe ich folgendes:

  • Die Customer Klasse hat meine drei xxxContactId Spalten als Felder - das ist wie erwartet
  • EF generiert auch drei Navigationseigenschaften vom Typ Contact - aber nennt sie Contact , Contact1 , Contact2 - uuuugggHHHH !

Ich versuche einen Weg zu finden, um diese schrecklich schlechten benannten Navigationseigenschaften zu umgehen ... diese sind schlecht, weil:

  • ihre nicht intuitive - welche zeigt auf welchen Kontakt jetzt?
  • sind die "stable", oder könnten sie sich im Laufe der Zeit ändern, wenn eine vierte Beziehung zu Contact eingeführt wird? Nicht sicher ..... (kann keine Dokumente zu diesem Thema finden)
  • nur ihre Namen sind absolut schrecklich ... warum heißen sie nicht DesignContact (basierend auf DesignContactId ), SalesContact (basierend auf SalesContactId ) usw.?

In EF 4.1 und höher war es möglich, T4-Templates zum .edmx hinzuzufügen und den Generierungsprozess zu beeinflussen - ist das irgendwie immer noch mit EF6 möglich, wenn Sie "Code-First from existing database" erstellen ? Ich konnte keinen Blogeintrag oder Artikel zu diesem Thema mehr finden .....

Oder gibt es eine andere Möglichkeit zu beeinflussen, wie EF die Klassen generiert - vor allem die Navigationseigenschaften? Kann ich eine Art benutzerdefinierte Konvention definieren oder etwas, um dies zu beeinflussen?

    
marc_s 11.09.2015, 11:46
quelle

2 Antworten

0

Danke an alle für das Chippen - ich habe verschiedene Ansätze ausprobiert:

  • Ich habe das "EF Reverse Poco" -Projekt auf Codeplex ausprobiert, war aber überhaupt nicht glücklich damit

  • Ich habe EF Power Tools für EF 6 ausprobiert - und es hat gut funktioniert. Dadurch konnte ich T4-Vorlagen hinzufügen, um den Codegenerierungsprozess zu beeinflussen. Works - aber die Herausforderung besteht nun darin, das Objektmodell zu verstehen, das als Grundlage für die Codegenerierung verwendet wird (was undokumentiert zu sein scheint ....)

  • Ich habe versucht, die Entity Framework 6.1.3 Codevorlagen für C # NuGet-Paket - funktioniert auch, ganz nett, hat aber die gleichen Probleme wie die Power Tools - um wirklich alles zu ändern, wird viel in das Objektmodell gegraben werden müssen

marc_s 06.10.2015, 20:35
quelle
0

Sie können die Einstellungen für generierte Klassen in der EDMX-Datei ändern (über Notepad usw.). Sichern Sie es einfach, bevor Sie es ändern. Es ist nicht ideal, aber es funktioniert und Updates von der Datenbank überschreiben Ihre Änderungen nicht.

%Vor%     
Tony Karel 06.10.2015 19:45
quelle