Ist ADO.NET EntityFramework das bessere LINQ?

27
Ist ADO.NET EntityFramework das bessere LINQ? VISUAL WORLD, Annaberger Str. 240, 09125 Chemnitz E-Mail: [email protected] , Web: http://www.visual-world.de

description

Ist ADO.NET EntityFramework das bessere LINQ?

Transcript of Ist ADO.NET EntityFramework das bessere LINQ?

Page 1: Ist ADO.NET EntityFramework das bessere LINQ?

Ist ADO.NET EntityFramework das bessere LINQ?

VISUAL WORLD, Annaberger Str. 240, 09125 Chemnitz

E-Mail: [email protected], Web: http://www.visual-world.de

Page 2: Ist ADO.NET EntityFramework das bessere LINQ?

Ü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

Page 3: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 4: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 5: Ist ADO.NET EntityFramework das bessere LINQ?

Themenwahl

„Ist ADO.NET EntityFramework das bessere LINQ?“

Was ist falsch an dieser Frage?

Wieso dieses Thema?

5

Page 6: Ist ADO.NET EntityFramework das bessere LINQ?

LINQ-to-…

6

Page 7: Ist ADO.NET EntityFramework das bessere LINQ?

LINQ-to-…

7

Page 8: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 9: Ist ADO.NET EntityFramework das bessere LINQ?

Idee des Objekt-Relationalen Mappings (ORM)

9

Page 10: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 11: Ist ADO.NET EntityFramework das bessere LINQ?

Idee des Objekt-Relationalen Mappings (ORM)Schlagwörter:- Forward Engineering

- Reverse Engineering

- Change Tracking

- Caching

- Objektcontainer (ObjectContext, DataContext)

11

Page 12: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 13: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 14: Ist ADO.NET EntityFramework das bessere LINQ?

Idee des Objekt-Relationalen Mappings (ORM)Ladestrategien-Beispiel für Eager Loading

14

Page 15: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 16: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 17: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 18: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 19: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 20: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 21: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 22: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 23: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 24: Ist ADO.NET EntityFramework das bessere LINQ?

Praktische Beispiele

Vergleich der Objektmodelle

Von LINQ-to-SQL und Entity Framework

24

Page 25: Ist ADO.NET EntityFramework das bessere LINQ?

Praktische Beispiele

Geschwindigkeitsvergleich zwischen

Entity Framework

LINQ-to-SQL

Stark typisierte DataSets

25

Page 26: Ist ADO.NET EntityFramework das bessere LINQ?

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

Page 27: Ist ADO.NET EntityFramework das bessere LINQ?

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