Wie kann ich die Standard-Code-Generierungsstrategie für edmx ändern?

8

Ich möchte die Standard-Code-Generierungsstrategie ändern, wie kann ich das tun?

Ich möchte einfach den Klassennamen von <#=code.Escape(container)#> in Entities ändern und die Standardverbindungszeichenfolge in name=Default ändern.

(Ich möchte keine Vorlagendatei für das Projekt erstellen, ich möchte sie so bearbeiten, dass sie global funktioniert)

Ich habe nach .tt Dateien gesucht, ich konnte nur die ItemTemplates finden. Ich weiß nicht, was den Code standardmäßig erzeugt, das ist der, den ich bearbeiten möchte.

Update: Ich weiß immer noch nicht wie ich das machen soll.

    
BrunoLM 04.02.2011, 16:16
quelle

2 Antworten

5

Sie können sehen, was den Code generiert, wenn Sie auf Ihre EMDX-Datei klicken und die Dateieigenschaften in Visual Studio überprüfen. Suchen Sie nach Custom Tool -Eigenschaft, die Ihnen den Klassennamen des Generators mitteilt, der EDMX-XML in kompilierbaren Code konvertiert.

Aber in Bezug auf die Modellanpassung würde ich immer noch vorschlagen, dass Sie T4 verwenden, das Ihren EDMX übernimmt und denselben Code wie der ursprüngliche Generator generiert. Das Gute ist, dass du es dann manipulieren kannst, bis du tot umfällst, wenn du willst.

Und wenn Sie beabsichtigen, das T4 auf mehreren EMDXs in Ihrem Projekt zu verwenden, dann schlage ich vor, dass Sie lieber eine .ttinclude -Datei erstellen und sie in jeder .tt -Datei referenzieren. Auf diese Weise werden Sie vorhandenen Code wiederverwenden und wenn Sie ihn ändern, wird er in allen generierten Dateien widergespiegelt.

Noch eine Frage: Was meinen Sie mit global ? Weltweit für alle EDMX-Dateien in Ihrem Projekt oder für alle EDMX-Dateien auf Ihrem Computer oder alle EDMX-Dateien in Ihrem Projektteam oder was? Definieren Sie global .

Zusätzliche Bearbeitung

Da Sie global als alle Projekte auf einer bestimmten Maschine definiert haben, würde ich das tun.

Zunächst einmal: Mit T4 können Sie EDMX anpassen - & gt; Codeumwandlungsänderungen pro Projekt oder besser pro Lösung (alle Projekte in einer bestimmten Lösung). Bei anderen Projekten / Lösungen auf demselben Computer sollten Sie dieselbe T4-Vorlagenreferenz angeben. Es ist also nicht global in deinem Sinne ...

Das Beste, was Sie tun können, ist, mit dieser T4-Vorlage eine benutzerdefinierte Visual Studio-Objektvorlage zu erstellen, sodass es viel einfacher ist, diese Standard-T4-Vorlage zu Ihren Lösungen / Projekten hinzuzufügen. Das ist so global wie Sie es mit T4 schaffen können.

Vielleicht sollten Sie diesen MSDN-Eintrag lesen, der über Ihre Art der Anpassung spricht:
Vorgehensweise: Anpassen der Objekt-Layer-Codegenerierung (Entity Data Model Designer)

    
Robert Koritnik 06.02.2011, 23:58
quelle
1

Ich weiß nicht, ob es überhaupt möglich ist, die Standardcodegenerierung zu ändern.

Anstatt zu versuchen, die Standardcodegenerierung zu ändern, könnten Sie vermutlich eine .tt erstellen, die eine abgeleitete Klasse aus ObjectContext generiert. Auf diese Weise können Sie es benennen und den Standardkonstruktor wie gewünscht implementieren.

Etwas wie:

%Vor%

Der Nachteil dieses Ansatzes besteht darin, dass Sie diese .tt -Datei mit jedem von Ihnen erstellten EDMX bereitstellen müssen.

Mit der Add-In-Architektur von Visual Studio können Sie jedoch eine Vorlage erstellen, die standardmäßig eine EDMX-Datei und diese .tt -Datei erstellt. Als Ersatz für das Hinzufügen eines einfachen "ADO.NET Entity Data Model"

Wenn Sie sich das EntityModelCodeGenerator (das benutzerdefinierte Tool, das von der Standard-Codegen-Strategie ausgeführt wird) ansehen, scheint es, dass es mit dem Erweiterungsmechanismus SingleFileGenerator registriert ist, der eine COM-Komponente ist. Einige weitere Informationen hier .

    
Yannick Motton 06.02.2011 23:59
quelle