Entity Framework 4 – Model First der TPH-Strategie mit Hilfe des Entity Designer Database Generation Power Pack

Entity Designer Database Generation Power Pack, wie kommt man nur auf diese Namen? Ich habe mich bereits mit dem Model-First Vorgehen des Entity Frameworks auseinandergesetzt. Da nur das TPT-Template für die DDL-Skriptgenerierung zur Verfügung steht, fand ich die Möglichkeiten sehr begrenzt. Was ich zur Zeit meines ersten Blog-Beitrags zu Model First noch nicht wusste, es gibt das Entity Designer Database Generation Power Pack, welches ein DDL-Template für die TPH-Strategie bereitstellt.

Heruntergeladen kann diese Erweiterung aus der Visual Studio Gallery unter dem Link http://visualstudiogallery.msdn.microsoft.com/en-us/df3541c3-d833-4b65-b942-989e7ec74c87 werden.

Nach dem Start begrüsst einen der Setup-Assistent:

Abbildung 1
Abbildung 1 Installation des Entity Designer Database Generation Power Pack

Mit Abschluss dieser Installation sind für Model-First folgende Templates verfügbar:

Workflow-Vorlagen:

  • Sync Database Project.xaml (VS)
  • Generate T-SQL Via T4 (TPT).xaml (VS)
  • Generate T-SQL Via T4 (TPH).xaml (VS)
  • Generate Migration T-SQL.xaml (VS)
  • Generate Migration T-SQL And Deploy.xaml (VS)
  • Generate DacPac.xaml (VS)
  • Generate DacPac And Deploy.xaml (VS)

DDL Generation Vorlagen:

  • CSDLToSSDL_TPT.tt (VS)
  • CSDLToSSDL_TPH.tt (VS)
  • CSDLToMSL_TPT.tt (VS)
  • CSDLToMSL_TPH.tt (VS)

Beginnen wir mit unserem Test:

  1. Als ersten Schritt legen wir die Entity Product an und erstellen ein paar Properties.
  2. Bei den Eigenschaften der Product-Klasse wird Abstract auf true gesetzt.
  3. Die Entity Book anlegen, ID-Property entfernen, ein paar neue hinzufügen und über die Eigenschaften Abstract auf true setzen und als Basisklasse Product auswählen.
  4. Die Entities EBook und Hardcover anlegen und als Basisklasse Book auswählen, ID Properties entfernen und ein paar neue hinzufügen. Wichtig dabei, diese Eigenschaften müssen Nullable sein (wobei wir beim ersten Schwachpunkt dieser Vorlage sind).
  5. Model validieren.

Das Ganze sieht anschliessend wie in folgender Abbildung aus:

Abbildung 2
Abbildung 2 Design für TPH

In den Eigenschaften des Entity Model Designer wird die Database Generation Workflow-Vorlage Generate T-SQL Via T4 (TPH) ausgewählt.

Abbildung 3
Abbildung 3 Auswahl TPH-Workflow zur DDL-Skriptgenerierung

Die Skriptgenerierung kann über das Kontextmenu "Generate Database from Model" gestartet werden und für die Klassenhierarchie wird eine Tabelle in der Datenbank erstellt.

Abbildung 4
Abbildung 4 Generierte Produkt-Tabelle aus Klassenhierarchie

Dieses Skript wird gegen die Datenbank ausgeführt und zur Sicherheit über das Kontextmenü mit dem Befehl "Update Model from database" aktualisiert. Wer das Beispiel so nachgebaut hat und das Model validiert, bekommt folgende Fehlermeldung:

Error 3023: Problem in mapping fragments starting at line 59:Column Product.Name in table Product must be mapped: It has no default value and is not nullable.

Dieses Problem kommt durch die abstrakten Basisklassen Produkt und Book zustande. In solch einen Fall muss keine Bedingung definiert werden, aber der TPH-Workflow erstellt für diese beiden Klassen jeweils eine Bedingung Product und Book.

Abbildung 5
Abbildung 5 Diskriminator für abstrakte Basisklasse Produkt
Abbildung 6
Abbildung 6 Diskriminator für abstrakte Basisklasse Book

Es ist Handarbeit angesagt. Bei den abstrakten Basisklassen müssen nun die Diskriminator-Bedingungen gelöscht werden, damit das Modell fehlerfrei validiert wird. Mit dieser Korrektur ist das Modell einsatzbereit.

Was ich an diesen Workflow nachteilig finde, sind folgende Punkte:

  • Die Eigenschaften in Hardcover und EBook müssen auf Nullable = true gesetzt werden. Der Workflow ist nicht in der Lage für die Einstellungen Nullable = false die notwendigen Constraints zu erzeugen.
  • Wird in der Klasse wie zum Beispiel Hardcover oder EBook eine Identitätsspalte angelegt, ergibt das keine Fehlermeldung bei der Validierung. Erst bei der Skriptausführung kommt es zu Fehlern.
  • Die Diskriminator-Spalten werden nicht normalisiert, möchte man diese auf Ebene der Datenbank verwenden, hat man mit Lösch- und Einfügeanomalien zu kämpfen.
  • Die Diskriminator-Spalte ist standardmässig nvarchar(4000).

Ich werde das Entity Designer Database Generation Power Pack im Auge behalten, evtl. kommen hier die Anpassungen in einer späteren Version. Zurzeit überzeugt es mich jedoch nocht nicht.

  •  
  • 0 Kommentar(e)
  •  

Mein Kommentar

Über jeden weiteren Kommentar in diesem Post benachrichtigen.

Zurück

Translate this page

Kategorien

  • [-].NET Development (215)
  • [-]Datenbank (26)
  • HTML (1)
  • Konfiguration (12)
  • Mind Map (10)
  • Off-topic (9)
  • Open Source (3)
  • Qualität (7)
  • Sharepoint (6)
  • Sicherheit (2)

Archiv

Social Bookmarking

Bookmark bei: Mr. Wong Bookmark bei: Webnews Bookmark bei: Icio Bookmark bei: Oneview Bookmark bei: Linkarena Bookmark bei: Favoriten Bookmark bei: Seekxl Bookmark bei: Favit Bookmark bei: Social Bookmarking Tool Bookmark bei: Power Oldie Bookmark bei: Bookmarks.cc Bookmark bei: Newskick Bookmark bei: Newsider Bookmark bei: Linksilo Bookmark bei: Readster Bookmark bei: Folkd Bookmark bei: Yigg Bookmark bei: Digg Bookmark bei: Del.icio.us Bookmark bei: Reddit Bookmark bei: Simpy Bookmark bei: StumbleUpon Bookmark bei: Slashdot Bookmark bei: Netscape Bookmark bei: Furl Bookmark bei: Yahoo Bookmark bei: Spurl Bookmark bei: Google Bookmark bei: Blinklist Bookmark bei: Blogmarks Bookmark bei: Diigo Bookmark bei: Technorati Bookmark bei: Newsvine Bookmark bei: Blinkbits Bookmark bei: Ma.Gnolia Bookmark bei: Smarking Bookmark bei: Netvouz Information