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 User Experience Crash Kurs Do, 9.6.2011 DotNetNuke
Agenda Kontext-Laufzeit Abfragen EDM-Designer EF Datenbank-Provider Leistungsoptimierung Code First
Kontext-Laufzeit Web-Anwendungen HttpContext.Current Request Repository ObjectContext (ctx) Repository Repository Repository
Kontext-Laufzeit Smart clients Pro Form GUI Form ctx Form ctx Form ctx Form ctx
Abfragen
Abfragen LINQ to Entities IQueryable<T> Verzögerte Ausführung DB
Abfragen LINQ to Objects IEnumerable<T> Ausführung im RAM
Abfragen Objekte mit vielen Eigenschaften
Abfragen SqlFunctions/EntityFunctions
EDM Designer
EDM Designer Konkurrenzierende Namensrichtlinien Variante 1 Entity Developer (DevArt, edml)
EDM Designer Konkurrenzierende Namensrichtlinien Variante Huagati DBML/EDMX Tools
EDM Designer Konkurrenzierende Namensrichtlinien 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 ADO.NET Entity Data Model Designer Extension Starter Kit Projekt aus Vorlage erstellen
EDM Designer ADO.NET Entity Data Model Designer Extension Starter Kit Manifestdatei anpassen
EDM Designer ADO.NET Entity Data Model Designer Extension Starter Kit ModelGenerationExtension.cs mit Logik befüllen
EDM Designer ADO.NET Entity Data Model Designer Extension Starter Kit Nach VS Neustart
Konkurrenzierende Namensrichtlinien Demo Konkurrenzierende Namensrichtlinien
EDM Designer Blob-Eigenschaft nachladen Problem Spalte aus Tabelle nachladen Lösungsvorschlag Blob-Eigenschaft in eigene Entity auslagern 1 : 1 Beziehung modellieren
EDM Designer Blob-Eigenschaft nachladen
EDM Designer Spatial Data Quelle: http://jasonfollas.com
EDM Designer Spatial Data Links Variante mit View (J. Follas) Variante mit View (J. Lerman) Variante mit Trigger ohne View PostGIS and Entity Framework
EDM Designer Eigene Code-Generierungsvorlagen Symbolvorlage erstellen Platzhalter $edmxInputFile$ Vstemplate mit Präfix ADONETArtifactGenerator_ ProjectItem OpenInEditor=„false“ Zippen und ins ItemTemplate-Verzeichnis kopieren
Eigene Code-Generierungsvorlagen Demo Eigene Code-Generierungsvorlagen
EDM Designer Eigene DDL-Generierungsvorlagen Model First T4-Template erstellen In Ordner „Laufwerk:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen“ kopieren Auswahl über Projekteigenschaften
EDM Designer Eigene DDL-Generierungsvorlagen Model First
EDM Designer Model First DDL-Skript als Projektmappe Entity Designer Database Generation Power Pack installieren Datenbankprojekt hinzufügen (Name wie Edmx-Datei) Workflow Sync Database Project auswählen Assistent abschliessen
EDM Designer Model First DDL-Skript als Projektmappe Entity Designer Database Generation Power Pack installieren
EDM Designer Model First DDL-Skript als Projektmappe Datenbankprojekt hinzufügen (Name wie Edmx-Datei)
EDM Designer Model First DDL-Skript als Projektmappe Datenbankprojekt hinzufügen (Name wie Edmx-Datei)
EDM Designer Model First DDL-Skript als Projektmappe Workflow Sync Database Project auswählen
EDM Designer Model First DDL-Skript als Projektmappe Assistent abschliessen
EDM Designer Model First DDL-Skript als Projektmappe
EDM Designer Model First/DB First Round trip Voraussetzungen Entity Designer Database Generation Power Pack installieren Datenbankprojekt anlegen (Name wie Edmx-Datei) Workflow Datenbankgenerierung auf Sync Database Project
EDM Designer Model First/DB First Round trip Änderungen am Modell vornehmen
EDM Designer Model First/DB First Round trip Workflow Sync Database Project ausführen
EDM Designer Model First/DB First Round trip Daten/Neuer Schemavergleich
EDM Designer Model First/DB First Round trip Schemavergleich
EDM Designer Model First/DB First Round trip Änderung an Datenbank vornehmen
EDM Designer Model First/DB First Round trip Modell aus der Datenbank aktualisieren
EDM Designer Model First/DB First Round trip Neues Modell mit Projekt synchronisieren
EDM Designer Huagati DBML/EDMXTools Round trip Änderungen vornehmen
EDM Designer Huagati DBML/EDMXTools Round trip Model Comparer öffnen
EDM Designer Huagati DBML/EDMXTools Round trip Änderungen von CSDL auf SSDL übertragen
EDM Designer Huagati DBML/EDMXTools Round trip Änderungen von SSDL auf Datenbank übertragen
EDM Designer Huagati DBML/EDMXTools Round trip Change-Script
EDM Designer Huagati DBML/EDMXTools Round trip Änderungen von Datenbank übertragen
EDM Designer Huagati DBML/EDMXTools Round trip Model Comparer öffnen
EDM Designer Huagati DBML/EDMXTools Round trip Änderungen von Datenbank auf SSDL übertragen
EDM Designer Huagati DBML/EDMXTools Round trip Änderungen von SSDL auf CSDL übertragen
EDM Designer Huagati DBML/EDMXTools Round trip Modell
EDM Designer Erweitern mit benutzerdefinierten Eigenschaften 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 Erweitern mit benutzerdefinierten Eigenschaften Projekt erstellen und Manifestdatei anpassen
EDM Designer Erweitern mit benutzerdefinierten Eigenschaften Properties.cs und PropertiesFactory.cs mit Logik befüllen
EDM Designer Erweitern mit benutzerdefinierten Eigenschaften Nach der Installation
EDM Designer Erweitern mit benutzerdefinierten Eigenschaften T4-Vorlage erstellen und verwenden
Erweitern mit benutzerdefinierten Eigenschaften Demo Erweitern mit benutzerdefinierten Eigenschaften
EF Datenbank-Provider Am Beispiel MySQL
EF Datenbank-Provider Model First MySQL 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 Model First MySQL Modell anlegen
EF Datenbank-Provider Model First MySQL DDL Generation Template SSDLToMySQL.tt (VS)
EF Datenbank-Provider Model First MySQL Datenbank erstellen
EF Datenbank-Provider Mehrere Datenbank unterstützen 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 Mehrere Datenbank unterstützen Modell anlegen
EF Datenbank-Provider Mehrere Datenbank unterstützen Textdatei für SSDL anlegen
EF Datenbank-Provider Mehrere Datenbank unterstützen Build Action Embedded Resource
EF Datenbank-Provider Mehrere Datenbank unterstützen SSDL-Inhalt von Edmx-Datei kopieren und anpassen
EF Datenbank-Provider Mehrere Datenbank unterstützen Connection String anpassen
EF Datenbank-Provider Mehrere Datenbank unterstützen Datenbankabhängige Herausforderungen MySQL: Schema entspricht Datenbank Oracle: 30 Zeichen-Limit
Leistungsoptimierung
Leistungsoptimierung Profiler Unterstützung SQL Server Profiler EF Prof Hinweise zu Problemen wie SELECT N+1 Huagati Query Profiler EF Tracing Provider
Leistungsoptimierung Kontext-Initialisierung mit View-Generation Kaltstart vermeiden Variante 1: Mit EdmGen.exe erstellen Variante 2. T4 Vorlage Beispiel Modell mit 73 Entitäten
Demo View
Leistungsoptimierung Compiled Query Cachen von Linq to Entities - Abfragen
Leistungsoptimierung NoTracking Wenn keine Änderungsverfolgung notwendig
Leistungsoptimierung Massenmanipulation Nicht die Stärke von ORM
Leistungsoptimierung Span-Queries Laden vieler verbundener Objekte Eager Loading Ressourcenintensiv Lazy Loading Zeitintensiv
Demo Ein Schwachpunkt
Leistungsoptimierung Weitere Möglichkeiten 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 Zugriff auf ObjectContext
Code-First SQL ausführen Aber: SqlQuery hat Mühe mit ComplexType
Code-First EDMX-Datei erstellen
Code-First Read-Only Eigenschaft in Datenbank speichern
Code-First Änderungen Rückgängig machen
Code-First Zugriff auf Cache
Code-First Indizes erstellen
Zusammenfassung Links 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 Buch-Empfehlungen ISBN-13: 978-0596807269 ISBN-13: 978-1430227038
Q&A
3/28/2017 8:10 PM © 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. © 2010 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.