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:
Customer
Klasse hat meine drei xxxContactId
Spalten als Felder - das ist wie erwartet 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:
Contact
eingeführt wird? Nicht sicher ..... (kann keine Dokumente zu diesem Thema finden) 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?
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
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%Tags und Links sql-server c# visual-studio-2013 entity-framework-6 code-first