86
René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Embed Size (px)

Citation preview

Page 1: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

René LeupoldIS DeveloperComgate Solutions AG

Entity FrameworkTipps und Tricks

Page 2: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps 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

Page 3: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Agenda

Kontext-LaufzeitAbfragenEDM-DesignerEF Datenbank-ProviderLeistungsoptimierungCode First

Page 4: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Kontext-Laufzeit Web-Anwendungen

HttpContext.Current

Requ

est

Obj

ectC

onte

xt (c

tx)Repository

Repository

Repository

Repository

Page 5: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Kontext-Laufzeit Smart clients

Pro Form

GU

I

ctxForm

Form

Form

Form

ctx

ctx

ctx

Page 6: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Abfragen

Page 7: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

AbfragenLINQ to Entities

IQueryable<T>Verzögerte Ausführung DB

Page 8: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

AbfragenLINQ to Objects

IEnumerable<T>Ausführung im RAM

Page 9: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

AbfragenObjekte mit vielen Eigenschaften

Page 10: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

AbfragenSqlFunctions/EntityFunctions

Page 11: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM Designer

Page 12: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerKonkurrenzierende Namensrichtlinien

Variante Huagati DBML/EDMX Tools

Page 13: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

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

Page 14: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerADO.NET Entity Data Model Designer Extension Starter Kit

Projekt aus Vorlage erstellen

Page 15: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerADO.NET Entity Data Model Designer Extension Starter Kit

Manifestdatei anpassen

Page 16: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerADO.NET Entity Data Model Designer Extension Starter Kit

ModelGenerationExtension.cs mit Logik befüllen

Page 17: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerADO.NET Entity Data Model Designer Extension Starter Kit

Nach VS Neustart

Page 18: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Konkurrenzierende Namensrichtlinien

Demo

Page 19: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerBlob-Eigenschaft nachladen

ProblemSpalte aus Tabelle nachladen

LösungsvorschlagBlob-Eigenschaft in eigene Entity auslagern1 : 1 Beziehung modellieren

Page 20: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerBlob-Eigenschaft nachladen

Page 21: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerSpatial Data

Quelle: http://jasonfollas.com

Page 23: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerEigene Code-Generierungsvorlagen

Symbolvorlage erstellenPlatzhalter $edmxInputFile$Vstemplate mit Präfix ADONETArtifactGenerator_ ProjectItem OpenInEditor=„false“Zippen und ins ItemTemplate-Verzeichnis kopieren

Page 24: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Eigene Code-Generierungsvorlagen

Demo

Page 25: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

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

Page 26: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerEigene DDL-Generierungsvorlagen Model First

Page 27: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

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

Page 28: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First DDL-Skript als Projektmappe

Entity Designer Database Generation Power Pack installieren

Page 29: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First DDL-Skript als Projektmappe

Datenbankprojekt hinzufügen (Name wie Edmx-Datei)

Page 30: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First DDL-Skript als Projektmappe

Datenbankprojekt hinzufügen (Name wie Edmx-Datei)

Page 31: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First DDL-Skript als Projektmappe

Workflow Sync Database Project auswählen

Page 32: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First DDL-Skript als Projektmappe

Assistent abschliessen

Page 33: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First DDL-Skript als Projektmappe

Projektmappe

Page 34: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

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

Page 35: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First/DB First Round trip

Änderungen am Modell vornehmen

Page 36: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First/DB First Round trip

Workflow Sync Database Project ausführen

Page 37: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First/DB First Round trip

Daten/Neuer Schemavergleich

Page 38: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First/DB First Round trip

Schemavergleich

Page 39: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First/DB First Round trip

Änderung an Datenbank vornehmen

Page 40: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First/DB First Round trip

Modell aus der Datenbank aktualisieren

Page 41: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

EDM DesignerModel First/DB First Round trip

Neues Modell mit Projekt synchronisieren

Page 42: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Änderungen vornehmen

EDM DesignerHuagati DBML/EDMXTools Round trip

Page 43: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Model Comparer öffnen

EDM DesignerHuagati DBML/EDMXTools Round trip

Page 44: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Änderungen von CSDL auf SSDL übertragen

EDM DesignerHuagati DBML/EDMXTools Round trip

Page 45: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Änderungen von SSDL auf Datenbank übertragen

EDM DesignerHuagati DBML/EDMXTools Round trip

Page 46: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Change-Script

EDM DesignerHuagati DBML/EDMXTools Round trip

Page 47: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

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

Page 48: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Projekt erstellen und Manifestdatei anpassen

EDM DesignerErweitern mit benutzerdefinierten Eigenschaften

Page 49: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Properties.cs und PropertiesFactory.cs mit Logik befüllen

EDM DesignerErweitern mit benutzerdefinierten Eigenschaften

Page 50: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Nach der Installation

EDM DesignerErweitern mit benutzerdefinierten Eigenschaften

Page 51: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

T4-Vorlage erstellen und verwenden

EDM DesignerErweitern mit benutzerdefinierten Eigenschaften

Page 52: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Erweitern mit benutzerdefinierten Eigenschaften

Demo

Page 53: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Am Beispiel MySQL

EF Datenbank-Provider

Page 54: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

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

Page 55: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Modell anlegen

EF Datenbank-ProviderModel First MySQL

Page 56: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

DDL Generation Template SSDLToMySQL.tt (VS)

EF Datenbank-ProviderModel First MySQL

Page 57: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Datenbank erstellen

EF Datenbank-ProviderModel First MySQL

Page 58: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

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

Page 59: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Modell anlegen

EF Datenbank-ProviderMehrere Datenbank unterstützen

Page 60: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Textdatei für SSDL anlegen

EF Datenbank-ProviderMehrere Datenbank unterstützen

Page 61: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Build Action Embedded Resource

EF Datenbank-ProviderMehrere Datenbank unterstützen

Page 62: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

SSDL-Inhalt von Edmx-Datei kopieren und anpassen

EF Datenbank-ProviderMehrere Datenbank unterstützen

Page 63: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Connection String anpassen

EF Datenbank-ProviderMehrere Datenbank unterstützen

Page 64: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Datenbankabhängige HerausforderungenMySQL: Schema entspricht DatenbankOracle: 30 Zeichen-Limit

EF Datenbank-ProviderMehrere Datenbank unterstützen

Page 65: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Leistungsoptimierung

Page 66: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Unterstützung SQL Server ProfilerEF Prof

Hinweise zu Problemen wie SELECT N+1

Huagati Query ProfilerEF Tracing Provider

LeistungsoptimierungProfiler

Page 67: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

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

Page 68: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

View

Demo

Page 69: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Cachen von Linq to Entities - Abfragen

LeistungsoptimierungCompiled Query

Page 70: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Wenn keine Änderungsverfolgung notwendig

LeistungsoptimierungNoTracking

Laden0

500

1000

1500

2000

25002054

571

TrackingNoTracking

Page 71: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Nicht die Stärke von ORM

LeistungsoptimierungMassenmanipulation

Update0

200

400

600

800683

6

ORMSQL

Page 72: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Laden vieler verbundener ObjekteEager Loading RessourcenintensivLazy Loading Zeitintensiv

LeistungsoptimierungSpan-Queries

Objektbaum laden0

100020003000400050006000700080009000

3660

7800

9421063

EagerLazyTranslateEinzeln Laden

Page 73: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Ein Schwachpunkt

Demo

Page 74: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

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

Page 75: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Code First

Page 76: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Code-FirstZugriff auf ObjectContext

Page 77: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Aber: SqlQuery hat Mühe mit ComplexType

Code-FirstSQL ausführen

Page 78: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Code-FirstEDMX-Datei erstellen

Page 79: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Code-FirstRead-Only Eigenschaft in Datenbank speichern

Page 80: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Code-FirstÄnderungen Rückgängig machen

Page 81: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Code-FirstZugriff auf Cache

Page 82: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Code-FirstIndizes erstellen

Page 84: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

ZusammenfassungBuch-Empfehlungen

ISBN-13: 978-0596807269

ISBN-13: 978-1430227038

Page 85: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

Q&A

Page 86: René Leupold IS Developer Comgate Solutions AG Entity Framework Tipps und Tricks

© 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.