Ist ADO.NET EntityFramework das bessere LINQ?
VISUAL WORLD, Annaberger Str. 240, 09125 Chemnitz
E-Mail: [email protected], Web: http://www.visual-world.de
Übersicht
• Einleitung• Vorstellung des Referenten• LINQ-to-…• Idee des Objekt-Relationalen Mappings (ORM)• LINQ-to-SQL und ADO.NET Entity Framework (EF)• Praktische Beispiele• Geschwindigkeitsvergleich zwischen LINQ, EF und Typisierten
Datasets
2
EinleitungZiele dieses Vortrags- Erster Kontakt mit dem Entity Framework und LINQ-to-SQL- Unterschied zwischen dem Entity Framework und LINQ-to-SQL
aufzeigen- Diskussion am späteren Abend
3
Vorstellung des Referenten- Robert Meyer
- Softwareentwickler in der Firma Visual World seit 2007
- Entwicklung von Individualsoftware im Bereich Geschäftssoftware (ERP, CRM und Warenwirtschaftssysteme)
- Schwerpunkte:- Datenbanken (SQL Server ab 2000)
- Softwarearchitektur und –optimierung
- WinForms und WPF
- Datenzugriffstechnologien
- Microsoft Certified Professional für .NET 2.0
4
Themenwahl
„Ist ADO.NET EntityFramework das bessere LINQ?“
Was ist falsch an dieser Frage?
Wieso dieses Thema?
5
LINQ-to-…
6
LINQ-to-…
7
Idee des Objekt-Relationalen Mappings (ORM)Was ist ein OR-Mapper?
„Objekt-Relationales Mapping ist die Abbildung von Geschäftsobjekten
im Hauptspeicher auf Datensätzen in relationalen Datenbanktabellen
zum Zwecke der Objektpersistenz“
Objekt-Relationales Mapping ist die Abbildung zwischen Objekten und Datensätzen bzw. Klassen und Tabellen.
8
Idee des Objekt-Relationalen Mappings (ORM)
9
Idee des Objekt-Relationalen Mappings (ORM)Schlagwörter:- Mapping-Szenarien
- Abfragesprachen- Object Query Language (OQL) in VOA und Genome
- Hibernate Query Language (HQL) in nHibernate
- Language Integrated Query (LINQ) in Linq-to-Sql und EntityFramework
-Ladestrategien-Lazy Loading
-Eager Loading
10
Idee des Objekt-Relationalen Mappings (ORM)Schlagwörter:- Forward Engineering
- Reverse Engineering
- Change Tracking
- Caching
- Objektcontainer (ObjectContext, DataContext)
11
Idee des Objekt-Relationalen Mappings (ORM)Abfragesprachen- Jeder OR-Mapper hat eine (eigene) Abfragesprache
- SQL ist als Abfragesprache nicht geeignet, das sich SQL auf die Datenbankstruktur (Tabellennamen etc.) bezieht.
- Trend geht zur Language Integrated Query (LINQ), durch die Integration in den Sprachsyntax von C# und Visual Basic 2008
- LINQ kann durch dokumentierte Schnittstellen auch von Drittanbietern genutzt werden (LINQ-to-MySql, LINQ-to-SAP, LINQ-to-Amazon und viele mehr)
12
Idee des Objekt-Relationalen Mappings (ORM)Ladestrategien-Übernehmen der Entscheidung wann Daten zu laden sind
-Lazy Loading bzw. Delayed Loading-Nachladen von Abhängigkeiten bei Bedarf
-Standard bei allen OR-Mappern
-Eager Loading-Abhängigkeiten werden direkt mit geladen
-Muss explizit ausgeführt werden
-Entscheidungskriterien sind:-Datenmenge
-Werden die Daten wirklich benötigt?
13
Idee des Objekt-Relationalen Mappings (ORM)Ladestrategien-Beispiel für Eager Loading
14
Idee des Objekt-Relationalen Mappings (ORM)Forward Engineering / Reverse Engineering- Forward Engineering (Code First)
-Wird nicht von allen OR-Mappern unterstüzt (LINQ unterstützt z.B. Forward Engineering, EF nicht)
-Vorgang: Es werden zuerst die Geschäftsobjekte (Klassen etc.) erstellt und daraus wird danach die Datenbank erstellt.
-Reverse Engineering (Database First)-Wird von vielen OR-Mappern unterstützt (LINQ, EF, nHibernate)
-Vorgang: Es wird zuerst die Datenbank erstellt und daraus ergeben sich die Geschäftsobjekte
-Problematik-Übernehmen von Änderung im Datenbankschema (z.B. Spaltentypen) in die Geschäftsobjekte (Klassen etc.)
15
Idee des Objekt-Relationalen Mappings (ORM)Change Tracking- ORM-Werkzeuge überwachen Änderungen in den Objekten (Change Tracking)
- Grund: Beim speichern der Objekte werden nur die veränderten oder neuen Objekte in die Datenbank übernommen.
- Ein guter OR-Mapper aktualisiert nur die betroffenen Spalten und nicht den ganzen Datensatz in der Datenbank
16
Idee des Objekt-Relationalen Mappings (ORM)Objektcontainer- Ein Objektcontainer hält die Objekte im RAM
- Objektcontainer werden vor der ersten Abfrage erzeugt
- Abfrage muss in dem Objektcontainer stattfinden
- Objektcontainer merken sich den Ausgangszustand eines Objekts
- Objektcontainer haben je nach OR-Mapper andere Namen z.B.:- ObjectContext (im Entity Framework)
- DataContext (in LINQ-to-SQL)
17
Idee des Objekt-Relationalen Mappings (ORM)Caching- Objektcontainer speichern Objekte zwischen
- Verhindert unnötiges neu laden der Objekte
- Einige OR-Mapper legen benutzen hierfür auch den Second Level Cache (z.B. nHibernate)
18
LINQ-to-SQL und ADO.NET Entity Framework
Entstehung:-LINQ-to-SQL und das EntityFramework wurden parallel entwickelt
-LINQ-to-SQL wurde mit dem .NET Framework 3.5 ausgeliefert
-EntityFramework kam mit dem SP1 für das .NET 3.5 Framework
-Das EntityFramework ist entstanden aus dem früheren Ansatz „Object Spaces“
-Das EntityFramework ist keine Weiterentwicklung von LINQ-to-SQL
19
LINQ-to-SQL und ADO.NET Entity Framework
Technische Unterschiede:- LINQ-to-SQL arbeitet direkt auf dem Datenbankschema
-EntityFramework verwendet die Entity-Relationship-Modellierung (ERM)
-LINQ-to-SQL hat nur einen Provider zu MSSQL (Nicht-Offenlegung der Schnittstellen), während das EF theoretisch für alle Datenbank nutzbar ist.
-LINQ-to-SQL unterstützt die Abfragesprache LINQ und direktes SQL, das EF nutzt LINQ Entity SQL (eSQL) und LINQ in Form von LINQ-to-Entities.
-LINQ-to-SQL unterstützt nur 1:1 Abbildung zwischen Tabellen und Objekten, beim EF sind beliebige Abbildungen möglich.
20
LINQ-to-SQL und ADO.NET Entity Framework
Technische Unterschiede:-LINQ-to-SQL unterstützt sowohl Reverse als auch Forward Engineering, EF hingegen unterstützt momentan nur Reverse Engineering.
-EF und LINQ-to-SQL verwenden in den Designern beide XML, aber absolut unterschiedliche Formate.
21
LINQ-to-SQL und ADO.NET Entity Framework
Gemeinsamkeit:- Sowohl EF als auch LINQ-to-SQL unterstützen Lazy und Eager Loading.
-In beiden Lösungen hält der Kontext (Objektkontext (EF) und Datakontext (LINQ-to-SQL) die Objekte zusammen.
-Beide unterstützen den LINQ Syntax
22
LINQ-to-SQL und ADO.NET Entity Framework
Einsatzszenarien:-LINQ-to-SQL für einfach Mapping-Szenarien und kleine Anwendungen
-Entity Framework ist für komplexe Anwendungsfälle gedacht.
-Entity Framework ist jedoch viel lockerer Verknüpfung als das LINQ-to-SQL Model und kann somit leichter angepasst werden.
23
Praktische Beispiele
Vergleich der Objektmodelle
Von LINQ-to-SQL und Entity Framework
24
Praktische Beispiele
Geschwindigkeitsvergleich zwischen
Entity Framework
LINQ-to-SQL
Stark typisierte DataSets
25
Vorschau Entity Framework
Ankündigungen für Entity Framework Version 2 in .NET 4.0-Unterstützung von Forward Engineering (kein Round Trip Engineering)
-Model Definied Functions
-Unterstützung von Table Valued Functions (TVF)
-Unterstützung von StoredProcedures (Rückgabe von Scalarwerten z.B. String)
- …
26
Ende
Vielen Dank für Eure Aufmerksamkeit!
Quellen: Kontakt:
- CodeProject (Bilder) Robert Meyer
-.Net 3.5 Crashkurs (ISBN: 978-3-86645-512-2) [email protected]
- Diverse Foren https://www.xing.com/profile/Robert_Meyer10
27