2016-06-15 30 views
1

Ich versuche, die T4-Vorlage des ADO.Net Entity-Datenmodells für den EF-Code zuerst aus der vorhandenen Datenbank zu suchen und anzupassen.T4-Vorlage anpassen - ADO.Net-Entity-Datenmodell für EF-Code zuerst aus vorhandener Datenbank

Was ich anpassen oder ändern möchte, ist Datentyp Mapping. Ich verwende ODP.Net Provider von Oracle, der EF unterstützt. Ich versuche, die Oracle-Datentypennummer aufgrund meiner Anforderung zu Int64 anstelle von Dezimal neu zuordnen.

Da ich zum Bearbeiten von T4-Dateien für die Anpassung neu bin, finde ich Schwierigkeiten beim Auffinden der Vorlagendatei, die den Code zuerst mappt. Jede Hilfe, die mich in die richtige Richtung weist, wird geschätzt. enter image description here

+0

Haben Sie etwas gefunden? Soweit ich gesucht habe, wird es von DLL erzeugt und nicht von einem T4. Gefunden C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ Allgemein7 \ IDE \ ItemTemplatesCache \ CSharp \ Daten \ 1033 \ CFCSEF6 \ CodeFirst_CS_V6.0.vstplate -> was mich zu führte C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Microsoft.Data.Entity.Design.dll ... konnte den genauen Code jedoch noch nicht finden. – drizin

+0

@drizin noch kein Glück. Bitte lassen Sie mich wissen, wenn Sie eine alternative Lösung finden. – Hasteq

Antwort

0

UPDATE Februar 2017: Sie sollten dieses erstaunliche EntityFramework Reverse POCO Code First Generator Projekt überprüfen, die besteht aus T4-Vorlagen-Code zunächst aus einer bestehenden Datenbank zu tun.

Diese Vorlagen sind sehr einfach zu bedienen, vollständig anpassbar, und ich könnte meine Anpassungen leicht zu diesen Vorlagen hinzufügen! Nicht zu vergessen, dass sie wesentlich vollständiger sind als der ursprüngliche EF-Assistent. Die Autoren/Mitwirkenden dieses Projekts sind sehr freundlich und ansprechbar, und ich habe selbst einige Beiträge geleistet.

_

(Es stellte sich heraus, dass ich den Platz Rad neu zu erfinden wurde durch meine eigenen T4-Vorlagen erstellen).

Original-Antwort (nur als Referenz, wenn jemand in EF Wizard Quellcode Graben hilft): leicht

Ich weiß nicht, warum, aber die Vorlagen für Modell First (EF Designer aus der Datenbank) sind anpassbar (aber sie sind EDMX-basiert), während der Code für Code First aus der Datenbank ist nicht so einfach - auch wenn Sie es schaffen, die Vorlagen zu finden.

Wenn Sie rechts Ihr Projekt, klicken Sie auf „Entity Framework“ und „Reverse Engineering-Vorlagen anpassen“ Sie Context.tt, Entity.tt und Mapping.tt innerhalb Ordner CodeTemplates\ReverseEngineerCodeFirst bekommen. , diese Templates müssen jedoch von einem externen Aufrufer aufgerufen werden, der einige Kontextinformationen an die Templates weiterleiten soll - deshalb sind sie nicht bereit für die Anpassung wie die Model First-Templates.

Dies sind die gleichen Vorlagen, die Sie in Entity Framework source code (in Ordner src\PowerTools\CodeTemplates\ReverseEngineerCodeFirst) finden. Und in \src\PowerTools\Handlers\ReverseEngineerCodeFirstHandler.cs finden Sie die Methode ReverseEngineerCodeFirst, die Metadaten aus der Datenbank liest und an diese Vorlagen übergibt. Diese Aufrufmethode kann in eine eigene T4-Vorlage kopiert werden (Sie brauchen diese Power Tools also nicht zu erstellen und in Visual Studio zu installieren), aber es gibt eine Interaktion mit Visual Studio und mit dem Projekt, was schwierig wäre mit einfachen T4-Vorlagen.

Ich erstellte eine T4 template basierend auf dieser oben genannten Methode, im Grunde durch Zusammenstellen aller Klassen/Helfer, die die ReverseEngineerCodeFirstHandler.cs benötigt, und Entfernen von Verweisen auf die Visual Studio DTE.Es gibt einige Hinweise auf meiner Vorlage, aber im Grunde sollten Sie die für EF.Utility.CS.ttinclude sind zu entfernen, und kommentieren Sie die Variablen „var efHost“ und „var Code“

Diese Vorlagen, die Sie in Ordner finden CodeTemplates\ReverseEngineerCodeFirst sind fast identisch für einige geringfügige Unterschiede zum Kodex zunächst von Datenbank-Assistent, mit Ausnahme von:

  • der Assistent erstellt eine eins-zu-viele Navigationseigenschaften wie HashSet<T>, während die Vorlagen jene, die als List<T>
  • der Assistent verwendet nullables wie 01.238.565 erstellt, während der andere verwendet Nullable<int>
  • Der Assistent fügt einige Code-Analyse Unterdrückung Attribute [SuppressMessage]
  • Der Assistent die DbSets als virtuelle erzeugt, während die Vorlagen nicht.
  • Der Assistent generiert einen Teil der Daten-Mappings Annotations verwenden (wie [Table], [Key], [StringLength], usw.) und die anderen Teile (Eigenschaften und Beziehungen) innerhalb DbContext.OnModelCreating. Die T4-Vorlagen generieren alle Zuordnungen innerhalb der Konfigurationsklassen für jede Entität (EntityTypeConfiguration<Entity>).

Die meisten dieser Unterschiede können leicht angepasst werden, obwohl ich nicht denke, dass es wirklich wichtig ist. Wenn Sie starke Anpassungen vornehmen möchten (wie bei meinen Templates, die das automatische Schließen nicht existierender Beziehungen, Beziehungen zu Ansichten, Klassenvererbung enthalten), schlage ich vor, dass Sie eigene DTOs (oder POCOs) für die Übergabe von Entitäten/Eigenschaften erstellen/NavigationProperties zu den enthaltenen Vorlagen. In meinem Fall benutze ich das Original EdmMapping, mappe es in meine DTOs, mache viele Modifikationen an diesen DTOs (basierend auf meinen Unternehmensstandards), und übergebe diese DTOs an die T4 Includes (mit kleinen Modifikationen).