Tipp: Eigene T4-Vorlagen in den ADO.NET Entity Framework Designer einbinden

Der Dotnet-Doktor  –  0 Kommentare

Seit der Version 4.0 des ADO.NET Entity Framework kann man die Codegenerierung selbst einfach verändern. Die Codegenerierung basiert auf dem Text Template Transformation Toolkit (T4), einer Transformationssprache, die mit einer ähnlichen Platzhaltersyntax wie ASP.NET arbeitet.

Die Codegenerierungsvorlagen kann man im Visual Studio 2010 über den Codetextmenüfehl "Add Code Generation Item" austauschen. Microsoft liefert neben der Standardcodegenerierung auch eine Vorlage für Self-Tracking-Entities zum Einsatz mit Services mit. Als zusätzliche bekommt man zum Beispiel eine POCO-Vorlage und eine für den DbContext aus Entity Framework 4.1.

Eine eigene Vorlage (entweder komplett selbst oder auf Basis einer der oben genannten Vorlagen) kann man ganz normal über "Add Item" in ein Projekt einbinden. Dann muss man aber stets den Pfad zu der Modelldatei (.edmx) selbst setzen. Eleganter ist die Einbindung mit "Add Code Generation Item" im Kontextmenü des EF-Designers; dann wird der Pfad direkt richtig gesetzt.

Aber wie bekommt man seine eigene T4-Vorlage in diesen "Add Code Generation Item"-Dialog des Designers?

  1. Erstellen Sie ein Item Template aus Ihrer T4-Vorlage mit Visual Studio (File/Export Template/Item Template).
  2. Verändern Sie in der entstandenen ZIP-Datei den Namen der .vstemplate-Klasse. Dieser muss mit "ADONETArtifactGenerator_" beginnen, zum Beispiel "ADONETArtifactGenerator_MeinTolleT4Template.vstemplate". Kopieren Sie die ZIP-Datei danach in den Ordner
  3. C:\Users\(Username)\Documents\Visual Studio 2010\Templates\ItemTemplates\Visual C#\Data

Voila!

Eigene T4-Vorlagen im Entity Framework-Designer-Dialog "Add Code Generation Item"

PS. Die in obigem Screenshot zu sehenden Vorlagen gibt es in den Downloads zu meinem Vortrag zu Entity Framework Tipps und Tricks. Es handelt bei zwei Vorlagen um die Aufspaltung der Standardvorlage von Microsoft, sodass man Kontextklasse und Entitätsklassen auf zwei Projekte verteilen kann. Die dritte Vorlage ist eine erweiterte Form der Standardvorlage, die je Änderung im Rahmen von SaveChanges() in einer Tabelle "Protokoll" protokolliert. Ein entsprechendes Datenbankschema mit dieser Tabelle finden Sie in der Beispieldatenbank "World Wide Wings", siehe www.world-wide-wings.de.