Entity Framework
Tipps und Tricks
René Leupold
IS Developer
Comgate Solutions AG
.NET User Group Bern
www.dnug-bern.ch
Grösste aktive .NET User Group der Schweiz
Regelmässige Treffen mit Schwerpunktthemen
Nächste Events
Mo, 30.5.2011
Do, 9.6.2011
User Experience Crash Kurs
DotNetNuke
Agenda
Kontext-Laufzeit
Abfragen
EDM-Designer
EF Datenbank-Provider
Leistungsoptimierung
Code First
Kontext-Laufzeit
HttpContext.Current
Kontext-Laufzeit
Pro Form
Abfragen
Abfragen
IQueryable<T>
Verzögerte Ausführung DB
Abfragen
IEnumerable<T>
Ausführung im RAM
Abfragen
Abfragen
EDM Designer
EDM Designer
Variante Huagati DBML/EDMX Tools
EDM Designer
Variante ADO.NET Entity Data Model Designer
Extension Starter Kit
Download und Installation
Projekt aus Vorlage erstellen
Manifestdatei anpassen
ModelGenerationExtension.cs mit Logik befüllen
Installation
VS Neustart
EDM Designer
Projekt aus Vorlage erstellen
EDM Designer
Manifestdatei anpassen
EDM Designer
ModelGenerationExtension.cs mit Logik befüllen
EDM Designer
Nach VS Neustart
Demo
EDM Designer
Problem
Spalte aus Tabelle nachladen
Lösungsvorschlag
Blob-Eigenschaft in eigene Entity auslagern
1 : 1 Beziehung modellieren
EDM Designer
EDM Designer
EDM Designer
Variante mit View (J. Follas)
Variante mit View (J. Lerman)
Variante mit Trigger ohne View
PostGIS and Entity Framework
EDM Designer
Symbolvorlage erstellen
Platzhalter $edmxInputFile$
Vstemplate mit Präfix ADONETArtifactGenerator_
ProjectItem OpenInEditor=„false“
Zippen und ins ItemTemplate-Verzeichnis kopieren
Demo
Eigene CodeGenerierungsvorlagen
EDM Designer
T4-Template erstellen
In Ordner „Laufwerk:\Program Files (x86)\Microsoft Visual Studio
10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen“
Auswahl über Projekteigenschaften
kopieren
EDM Designer
EDM Designer
Entity Designer Database Generation Power Pack
installieren
Datenbankprojekt hinzufügen (Name wie EdmxDatei)
Workflow Sync Database Project auswählen
Assistent abschliessen
EDM Designer
Entity Designer Database Generation Power Pack
installieren
EDM Designer
Datenbankprojekt hinzufügen (Name wie EdmxDatei)
EDM Designer
Datenbankprojekt hinzufügen (Name wie EdmxDatei)
EDM Designer
Workflow Sync Database Project auswählen
EDM Designer
Assistent abschliessen
EDM Designer
Projektmappe
EDM Designer
Voraussetzungen
Entity Designer Database Generation Power Pack
installieren
Datenbankprojekt anlegen (Name wie EdmxDatei)
Workflow Datenbankgenerierung auf Sync
Database Project
EDM Designer
Änderungen am Modell vornehmen
EDM Designer
Workflow Sync Database Project ausführen
EDM Designer
Daten/Neuer Schemavergleich
EDM Designer
Schemavergleich
EDM Designer
Änderung an Datenbank vornehmen
EDM Designer
Modell aus der Datenbank aktualisieren
EDM Designer
Neues Modell mit Projekt synchronisieren
EDM Designer
Änderungen vornehmen
EDM Designer
Model Comparer öffnen
EDM Designer
Änderungen von CSDL auf SSDL übertragen
EDM Designer
Änderungen von SSDL auf Datenbank übertragen
EDM Designer
Change-Script
EDM Designer
EDM-Elemente um eigene Eigenschaften erweitern
Anpassen auf Prozesse
In T4-Vorlagen verwenden
Entity Data Model Designer Extension Starter Kit
installieren
Projekt erstellen und Manifestdatei anpassen
Properties.cs und PropertiesFactory.cs mit Logik
befüllen
Installation
T4-Vorlage erstellen und verwenden
EDM Designer
Projekt erstellen und Manifestdatei anpassen
EDM Designer
Properties.cs und PropertiesFactory.cs mit Logik
befüllen
EDM Designer
Nach der Installation
EDM Designer
T4-Vorlage erstellen und verwenden
Demo
EF Datenbank-Provider
Am Beispiel MySQL
EF Datenbank-Provider
MySQL Connector installieren (T4-Vorlage)
DevArt dotConnect for MySQL
Bessere Provider-Unterstützung (EdmFunctions)
Modell anlegen
Schema definieren
DDL Generation Template SSDLToMySQL.tt (VS)
Datenbank erstellen
EF Datenbank-Provider
Modell anlegen
EF Datenbank-Provider
DDL Generation Template SSDLToMySQL.tt (VS)
EF Datenbank-Provider
Datenbank erstellen
EF Datenbank-Provider
Modell anlegen
Mapping erstellen
Textdatei für SSDL anlegen
Build Action Embedded Resource
SSDL-Inhalt von Edmx-Datei kopieren und anpassen
Kompilieren
Connection String anpassen
EF Datenbank-Provider
Modell anlegen
EF Datenbank-Provider
Textdatei für SSDL anlegen
EF Datenbank-Provider
Build Action Embedded Resource
EF Datenbank-Provider
SSDL-Inhalt von Edmx-Datei kopieren und anpassen
EF Datenbank-Provider
Connection String anpassen
EF Datenbank-Provider
Datenbankabhängige Herausforderungen
MySQL: Schema entspricht Datenbank
Oracle: 30 Zeichen-Limit
Leistungsoptimierung
Leistungsoptimierung
Unterstützung
SQL Server Profiler
EF Prof
Hinweise zu Problemen wie SELECT N+1
Huagati Query Profiler
EF Tracing Provider
Leistungsoptimierung
Kaltstart vermeiden
Variante 1: Mit EdmGen.exe erstellen
Variante 2. T4 Vorlage
Beispiel Modell mit 73 Entitäten
500
449
362
400
300
ohne Views
mit Views
200
100
0
Init
Demo
View
Leistungsoptimierung
Cachen von Linq to Entities - Abfragen
Leistungsoptimierung
Wenn keine Änderungsverfolgung notwendig
2500
2054
2000
1500
1000
571
500
0
Laden
Tracking
NoTracking
Leistungsoptimierung
Nicht die Stärke von ORM
800
683
600
ORM
SQL
400
200
6
0
Update
Leistungsoptimierung
Laden vieler verbundener Objekte
Eager Loading Ressourcenintensiv
Lazy Loading Zeitintensiv
9000
8000
7000
6000
5000
4000
3000
2000
1000
0
7800
3660
942 1063
Objektbaum laden
Eager
Lazy
Translate
Einzeln Laden
Demo
Ein Schwachpunkt
Leistungsoptimierung
EfCachingProvider (2nd Level Cache)
EFTracingProvider (Query-Rewrite simulieren)
Paging mit Skip/Take
Entity SQL auf Entity Client
Datenbank
Indizes setzen
Query-Rewrite bei Join-Abfragen
Datenbankoptimierungsratgeber verwenden
Schrittweise denormalisieren
Code First
Code-First
Code-First
Aber: SqlQuery hat Mühe mit ComplexType
Code-First
Code-First
Code-First
Code-First
Code-First
Zusammenfassung
Huagati DBML/EDMX Tools
ADO.NET Entity Data Model Designer Extension Starter
Kit
Entity Designer Database Generation Power Pack
ADO.NET Team Blog
Entity Framework Design Blog
Meine Erfahrungen mit EF
EF-FAQ
Zusammenfassung
ISBN-13: 978-0596807269
ISBN-13: 978-1430227038
© 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.