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

Post on 06-Apr-2015

112 views 1 download

transcript

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

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.