René LeupoldIS DeveloperComgate Solutions AG
Entity FrameworkTipps und Tricks
www.dnug-bern.chGrösste aktive .NET User Group der SchweizRegelmässige Treffen mit Schwerpunktthemen
Nächste EventsMo, 30.5.2011User Experience Crash KursDo, 9.6.2011 DotNetNuke
.NET User Group Bern
Agenda
Kontext-LaufzeitAbfragenEDM-DesignerEF Datenbank-ProviderLeistungsoptimierungCode First
Kontext-Laufzeit Web-Anwendungen
HttpContext.Current
Requ
est
Obj
ectC
onte
xt (c
tx)Repository
Repository
Repository
Repository
Kontext-Laufzeit Smart clients
Pro Form
GU
I
ctxForm
Form
Form
Form
ctx
ctx
ctx
Abfragen
AbfragenLINQ to Entities
IQueryable<T>Verzögerte Ausführung DB
AbfragenLINQ to Objects
IEnumerable<T>Ausführung im RAM
AbfragenObjekte mit vielen Eigenschaften
AbfragenSqlFunctions/EntityFunctions
EDM Designer
EDM DesignerKonkurrenzierende Namensrichtlinien
Variante Huagati DBML/EDMX Tools
EDM DesignerKonkurrenzierende Namensrichtlinien
Variante ADO.NET Entity Data Model Designer Extension Starter Kit
Download und InstallationProjekt aus Vorlage erstellenManifestdatei anpassenModelGenerationExtension.cs mit Logik befüllenInstallationVS Neustart
EDM DesignerADO.NET Entity Data Model Designer Extension Starter Kit
Projekt aus Vorlage erstellen
EDM DesignerADO.NET Entity Data Model Designer Extension Starter Kit
Manifestdatei anpassen
EDM DesignerADO.NET Entity Data Model Designer Extension Starter Kit
ModelGenerationExtension.cs mit Logik befüllen
EDM DesignerADO.NET Entity Data Model Designer Extension Starter Kit
Nach VS Neustart
Konkurrenzierende Namensrichtlinien
Demo
EDM DesignerBlob-Eigenschaft nachladen
ProblemSpalte aus Tabelle nachladen
LösungsvorschlagBlob-Eigenschaft in eigene Entity auslagern1 : 1 Beziehung modellieren
EDM DesignerBlob-Eigenschaft nachladen
EDM DesignerSpatial Data
Quelle: http://jasonfollas.com
EDM DesignerSpatial Data Links
Variante mit View (J. Follas)Variante mit View (J. Lerman)Variante mit Trigger ohne View PostGIS and Entity Framework
EDM DesignerEigene Code-Generierungsvorlagen
Symbolvorlage erstellenPlatzhalter $edmxInputFile$Vstemplate mit Präfix ADONETArtifactGenerator_ ProjectItem OpenInEditor=„false“Zippen und ins ItemTemplate-Verzeichnis kopieren
Eigene Code-Generierungsvorlagen
Demo
EDM DesignerEigene DDL-Generierungsvorlagen Model First
T4-Template erstellenIn Ordner „Laufwerk:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen“
kopierenAuswahl über Projekteigenschaften
EDM DesignerEigene DDL-Generierungsvorlagen Model First
EDM DesignerModel First DDL-Skript als Projektmappe
Entity Designer Database Generation Power Pack installierenDatenbankprojekt hinzufügen (Name wie Edmx-Datei)Workflow Sync Database Project auswählenAssistent abschliessen
EDM DesignerModel First DDL-Skript als Projektmappe
Entity Designer Database Generation Power Pack installieren
EDM DesignerModel First DDL-Skript als Projektmappe
Datenbankprojekt hinzufügen (Name wie Edmx-Datei)
EDM DesignerModel First DDL-Skript als Projektmappe
Datenbankprojekt hinzufügen (Name wie Edmx-Datei)
EDM DesignerModel First DDL-Skript als Projektmappe
Workflow Sync Database Project auswählen
EDM DesignerModel First DDL-Skript als Projektmappe
Assistent abschliessen
EDM DesignerModel First DDL-Skript als Projektmappe
Projektmappe
EDM DesignerModel First/DB First Round trip
VoraussetzungenEntity Designer Database Generation Power Pack installierenDatenbankprojekt anlegen (Name wie Edmx-Datei)Workflow Datenbankgenerierung auf Sync Database Project
EDM DesignerModel First/DB First Round trip
Änderungen am Modell vornehmen
EDM DesignerModel First/DB First Round trip
Workflow Sync Database Project ausführen
EDM DesignerModel First/DB First Round trip
Daten/Neuer Schemavergleich
EDM DesignerModel First/DB First Round trip
Schemavergleich
EDM DesignerModel First/DB First Round trip
Änderung an Datenbank vornehmen
EDM DesignerModel First/DB First Round trip
Modell aus der Datenbank aktualisieren
EDM DesignerModel First/DB First Round trip
Neues Modell mit Projekt synchronisieren
Änderungen vornehmen
EDM DesignerHuagati DBML/EDMXTools Round trip
Model Comparer öffnen
EDM DesignerHuagati DBML/EDMXTools Round trip
Änderungen von CSDL auf SSDL übertragen
EDM DesignerHuagati DBML/EDMXTools Round trip
Änderungen von SSDL auf Datenbank übertragen
EDM DesignerHuagati DBML/EDMXTools Round trip
Change-Script
EDM DesignerHuagati DBML/EDMXTools Round trip
EDM-Elemente um eigene Eigenschaften erweiternAnpassen auf ProzesseIn T4-Vorlagen verwenden
Entity Data Model Designer Extension Starter Kit installieren
Projekt erstellen und Manifestdatei anpassenProperties.cs und PropertiesFactory.cs mit Logik befüllenInstallationT4-Vorlage erstellen und verwenden
EDM DesignerErweitern mit benutzerdefinierten Eigenschaften
Projekt erstellen und Manifestdatei anpassen
EDM DesignerErweitern mit benutzerdefinierten Eigenschaften
Properties.cs und PropertiesFactory.cs mit Logik befüllen
EDM DesignerErweitern mit benutzerdefinierten Eigenschaften
Nach der Installation
EDM DesignerErweitern mit benutzerdefinierten Eigenschaften
T4-Vorlage erstellen und verwenden
EDM DesignerErweitern mit benutzerdefinierten Eigenschaften
Erweitern mit benutzerdefinierten Eigenschaften
Demo
Am Beispiel MySQL
EF Datenbank-Provider
MySQL Connector installieren (T4-Vorlage)DevArt dotConnect for MySQL
Bessere Provider-Unterstützung (EdmFunctions)
Modell anlegenSchema definierenDDL Generation Template SSDLToMySQL.tt (VS)Datenbank erstellen
EF Datenbank-ProviderModel First MySQL
Modell anlegen
EF Datenbank-ProviderModel First MySQL
DDL Generation Template SSDLToMySQL.tt (VS)
EF Datenbank-ProviderModel First MySQL
Datenbank erstellen
EF Datenbank-ProviderModel First MySQL
Modell anlegenMapping erstellenTextdatei für SSDL anlegenBuild Action Embedded ResourceSSDL-Inhalt von Edmx-Datei kopieren und anpassenKompilierenConnection String anpassen
EF Datenbank-ProviderMehrere Datenbank unterstützen
Modell anlegen
EF Datenbank-ProviderMehrere Datenbank unterstützen
Textdatei für SSDL anlegen
EF Datenbank-ProviderMehrere Datenbank unterstützen
Build Action Embedded Resource
EF Datenbank-ProviderMehrere Datenbank unterstützen
SSDL-Inhalt von Edmx-Datei kopieren und anpassen
EF Datenbank-ProviderMehrere Datenbank unterstützen
Connection String anpassen
EF Datenbank-ProviderMehrere Datenbank unterstützen
Datenbankabhängige HerausforderungenMySQL: Schema entspricht DatenbankOracle: 30 Zeichen-Limit
EF Datenbank-ProviderMehrere Datenbank unterstützen
Leistungsoptimierung
Unterstützung SQL Server ProfilerEF Prof
Hinweise zu Problemen wie SELECT N+1
Huagati Query ProfilerEF Tracing Provider
LeistungsoptimierungProfiler
Kaltstart vermeidenVariante 1: Mit EdmGen.exe erstellenVariante 2. T4 VorlageBeispiel Modell mit 73 Entitäten
LeistungsoptimierungKontext-Initialisierung mit View-Generation
Init0
100
200
300
400
500 449
362
ohne Viewsmit Views
View
Demo
Cachen von Linq to Entities - Abfragen
LeistungsoptimierungCompiled Query
Wenn keine Änderungsverfolgung notwendig
LeistungsoptimierungNoTracking
Laden0
500
1000
1500
2000
25002054
571
TrackingNoTracking
Nicht die Stärke von ORM
LeistungsoptimierungMassenmanipulation
Update0
200
400
600
800683
6
ORMSQL
Laden vieler verbundener ObjekteEager Loading RessourcenintensivLazy Loading Zeitintensiv
LeistungsoptimierungSpan-Queries
Objektbaum laden0
100020003000400050006000700080009000
3660
7800
9421063
EagerLazyTranslateEinzeln Laden
Ein Schwachpunkt
Demo
EfCachingProvider (2nd Level Cache)EFTracingProvider (Query-Rewrite simulieren)Paging mit Skip/TakeEntity SQL auf Entity ClientDatenbank
Indizes setzenQuery-Rewrite bei Join-AbfragenDatenbankoptimierungsratgeber verwendenSchrittweise denormalisieren
LeistungsoptimierungWeitere Möglichkeiten
Code First
Code-FirstZugriff auf ObjectContext
Aber: SqlQuery hat Mühe mit ComplexType
Code-FirstSQL ausführen
Code-FirstEDMX-Datei erstellen
Code-FirstRead-Only Eigenschaft in Datenbank speichern
Code-FirstÄnderungen Rückgängig machen
Code-FirstZugriff auf Cache
Code-FirstIndizes erstellen
ZusammenfassungLinks
Huagati DBML/EDMX ToolsADO.NET Entity Data Model Designer Extension Starter KitEntity Designer Database Generation Power PackADO.NET Team BlogEntity Framework Design BlogMeine Erfahrungen mit EFEF-FAQ
ZusammenfassungBuch-Empfehlungen
ISBN-13: 978-0596807269
ISBN-13: 978-1430227038
Q&A
© 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after
the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.