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.