Ist ADO.NET EntityFramework das bessere LINQ? VISUAL WORLD, Annaberger Str. 240, 09125 Chemnitz E-Mail:  [email_address] ,...
Übersicht <ul><li>Einleitung </li></ul><ul><li>Vorstellung des Referenten </li></ul><ul><li>LINQ-to-… </li></ul><ul><li>Id...
Einleitung <ul><li>Ziele dieses Vortrags </li></ul><ul><li>Erster Kontakt mit dem Entity Framework und LINQ-to-SQL </li></...
Vorstellung des Referenten <ul><li>- Robert Meyer </li></ul><ul><li>Softwareentwickler in der Firma Visual World seit 2007...
Themenwahl <ul><li>„ Ist ADO.NET EntityFramework das bessere LINQ?“ </li></ul><ul><li>Was ist falsch an dieser Frage? </li...
LINQ-to-…
LINQ-to-…
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Was ist ein OR-Mapper? </li></ul><ul><li>„ Objekt-Relationales Mapping...
Idee des Objekt-Relationalen Mappings (ORM)
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Schlagwörter: </li></ul><ul><li>Mapping-Szenarien </li></ul><ul><li>Ab...
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Schlagwörter: </li></ul><ul><li>- Forward Engineering </li></ul><ul><l...
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Abfragesprachen </li></ul><ul><li>Jeder OR-Mapper hat eine (eigene) Ab...
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Ladestrategien </li></ul><ul><li>Übernehmen der Entscheidung wann Date...
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Ladestrategien </li></ul><ul><li>Beispiel für Eager Loading </li></ul>
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Forward Engineering / Reverse Engineering </li></ul><ul><li>Forward En...
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Change Tracking </li></ul><ul><li>ORM-Werkzeuge überwachen Änderungen ...
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Objektcontainer </li></ul><ul><li>Ein Objektcontainer hält die Objekte...
Idee des Objekt-Relationalen Mappings (ORM) <ul><li>Caching </li></ul><ul><li>Objektcontainer speichern Objekte zwischen <...
LINQ-to-SQL und ADO.NET Entity Framework <ul><li>Entstehung: </li></ul><ul><li>LINQ-to-SQL und das EntityFramework wurden ...
LINQ-to-SQL und ADO.NET Entity Framework <ul><li>Technische Unterschiede: </li></ul><ul><li>- LINQ-to-SQL arbeitet direkt ...
LINQ-to-SQL und ADO.NET Entity Framework <ul><li>Technische Unterschiede: </li></ul><ul><li>LINQ-to-SQL unterstützt sowohl...
LINQ-to-SQL und ADO.NET Entity Framework <ul><li>Gemeinsamkeit: </li></ul><ul><li>- Sowohl EF als auch LINQ-to-SQL unterst...
LINQ-to-SQL und ADO.NET Entity Framework <ul><li>Einsatzszenarien: </li></ul><ul><li>LINQ-to-SQL für einfach Mapping-Szena...
Praktische Beispiele <ul><li>Vergleich der Objektmodelle </li></ul><ul><li>Von LINQ-to-SQL und Entity Framework </li></ul>
Praktische Beispiele <ul><li>Geschwindigkeitsvergleich zwischen </li></ul><ul><li>Entity Framework </li></ul><ul><li>LINQ-...
Vorschau Entity Framework <ul><li>Ankündigungen für Entity Framework Version 2 in .NET 4.0 </li></ul><ul><li>Unterstützung...
Ende <ul><li>Vielen Dank für Eure Aufmerksamkeit! </li></ul><ul><li>Quellen: Kontakt: </li></ul><ul><li>CodeProject (Bilde...
Nächste SlideShare
Wird geladen in …5
×

Ist ADO.NET EntityFramework das bessere LINQ?

3.213 Aufrufe

Veröffentlicht am

Ist ADO.NET EntityFramework das bessere LINQ?

0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
3.213
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
270
Aktionen
Geteilt
0
Downloads
21
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Ist ADO.NET EntityFramework das bessere LINQ?

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

×