Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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.380 Aufrufe

Veröffentlicht am

Ist ADO.NET EntityFramework das bessere LINQ?

  • Als Erste(r) kommentieren

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

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>

×