Publicidad
Publicidad

Más contenido relacionado

Último(20)

Publicidad

O/R-Mapping mit NHibernate und Entity Framework

  1. .NET User Group Bern René Leupold Patrick Weibel www.dnug-bern.ch Follow dnugbe on twitter
  2. DNUG Bern Sponsoren
  3. Über René Leupold • connect@databinding.net • http://www.databinding.net • CV siehe Xing ;-)
  4. Über Patrick Weibel • network@eweibel.net • http://blog.eweibel.net • twitter.com/pweibel • CV siehe Xing
  5. Vorbereitung reicht für mehr
  6. Agenda • Überblick • Vorgehen • Einführung Entity Framework • Einführung NHibernate • Mapping • Ausblick ORM EF/NH
  7. Überblick • ORM impedance mismatch • Vererbung • Relationen und Beziehungen • Persistence ingnorance • ORM als Silver Bullet ORM Theorie
  8. ORM impedance mismatch • Identität • Struktur • Kapselung • Vererbung & Polymorphismus • Relationen/Beziehungen
  9. Vererbung: Table per hierarchie (TPH) • Synonym – Single table inheritance
  10. Vererbung: Table per type (TPT) • Synonym – class table inheritance (Vertikale Partitionierung)
  11. Vererbung: Table per class (TPC) • Synonym – Table per concrete class – concrete table inheritance (Horizontale Partitionierung)
  12. Relationen und Beziehungen
  13. Persistence ignorance • Entität ist Persistenz egal • Plain Old CLR Objects (POCO) • Keine Referenz zum Persistenzlayer • Mögliche Verletzung bei: – Id, Versionsfeld – Basisklasse oder Interfaces – Attribute – Virtuelle Eigenschaften
  14. ORM als Silver Bullet? • „Brauche kein SQL zu beherrschen“ • „Relationale Modell hat kein Einfluss auf OO-Design“ • „Batch Processing“
  15. Vorgehen • Top down • Middle out • Bottom up • Meet in the middle
  16. Top Down • Synonyme – Forward Engineering – Code First • Klassen zuerst • Code-Generierung – Mapping – DB-Schema
  17. Middle out • Synonyme – Model First • Mapping zuerst • Code-Generierung – Klassen – DB-Schema
  18. Bottom up • Synonyme – Reverse Engineering • DB-Schema zuerst • Code-Generierung – Mapping – Klassen
  19. Meet in the middle • Synonyme – n/a • DB-Schema und Klassen zuerst • Code-Generierung – Mapping • Mögliche Ursache – Sturheit von Architekt und DBA
  20. Einführung Entity Framework • Geschichte • Unterstützte Vorgehensweisen • Konfiguration • Hello World EF Überblick
  21. EF Geschichte VS 2008 Grenzen abstecken
  22. EF Geschichte VS 2008 SP1 hat nicht funktioniert1
  23. EF Geschichte 2 Seiten RAD Client/Server
  24. EF Geschichte 2 Seiten EA Web/SOA
  25. EF Geschichte Vote of no confidence Hauptpunkte EF 4 Zu Datenorientiert, Fehlende OO-Ansätze TPT, TPC, TPH unidirektional Viel Code für Lazy Loading Eager-Loading Explizites Lazy Loading zwingt zum Nachdenken Spezifische Datenmodelle und Best Practices ermöglichen T4 Fehlende Persistence Ignorance POCO EDMX Merge Conflicts Source Cotrol, nicht Teamfähig Code-First (CTP 4)
  26. Unterstützte Vorgehensweisen Vorgehen Top down Code First (CTP4) Middle out Model First (EF 4) Bottom up Generate from Database (EF 1) Meet in the middle Leave the company
  27. Konfiguration und Hello World • Demo
  28. Einführung NHibernate • Geschichte • Unterstützte Vorgehensweisen • Konfiguration • Hello World NH Überblick
  29. NH Geschichte Fotograf: Andrew Cooper
  30. NH Optionen
  31. Unterstützte Vorgehensweisen Vorgehen Top down Codegenerator, hbm2ddl Middle out hbm2net, hbm2ddl Bottom up db2hbm, hbm2net Meet in the middle Runaway
  32. Konfiguration und Hello World • Demo
  33. Mapping • 1 : m (Uni-/Bidirektional) • m : n • 1 : 1 • Selbstreferenzierung • 1 Klasse auf mehrere Tabellen • Mehrere Klassen auf eine Tabelle • Vererbung: TPH, TPT, TPC
  34. 1 : m Entity Framework • Standard ist bidirektional • Unidirektionale Beziehung nur mit FK- Assocations (EF 4) • Workaround bei Independent Associations – Navigation Property private • Besonderheit – Elemente aus Collection müssen explizit gelöscht werden NHibernate • Standard ist unidirektional • XML-Mapping – many-to-one – one-to-many • Fluent-Mapping – References – HasMany • Inverse nicht vergessen!
  35. n : m Entity Framework • Nur wenn PK aus FK besteht • Bei zusätzlichen Informationen PK anlegen und auf n : m verzichten NHibernate • XML-Mapping – many-to-many • Fluent-Mapping – HasManyToMany • Inverse nicht vergessen! • Cascade „all-delete- orphan“ macht nicht viel Sinn
  36. 1 : 1 Entity Framework • Tabellen 1 : 1 – Keine Einschränkung • Tabellen 1 : m mit UX – Independent Association funktioniert – FK Association Workaround notwendig NHibernate • XML-Mapping – one-to-one – many-to-one (bei separatem FKey) • Fluent-Mapping – HasOne – References (bei separatem FKey) • ID-Generator für Erweiterungstabelle „foreign“
  37. Selbstreferenzierung Entity Framework • Default Parent und Child Navigation Property NHibernate • XML-Mapping – Analog zu 1 : m Mapping • Fluent-Mapping – Analog zu 1 : m Mapping • Cascade „all-delete- orphan“ sinnvoll bei Collection
  38. 1 Klasse : m Tabellen Entity Framework • Tabellen müssen 1 : 1 – Beziehung besitzen • Konfiguration über die Mappings – Tabelle hinzufügen NHibernate • XML-Mapping – join • Fluent-Mapping – Join
  39. m Klassen : 1 Tabelle Entity Framework • Complex Type • Auslagern von Properties, wenn Support für Lazy- Loading NHibernate • XML-Mapping – component • Fluent-Mapping – Component – ComponentMap Klasse • XML: Redundanz • Attribute-Mapping – Workaround mit [RawXml]
  40. TPH Entity Framework • Entities anlegen • Vererbungshierarchy anlegen • Discriminator definieren NHibernate • XML-Mapping – discriminator – subclass mit discriminator- value • Fluent-Mapping – Root-Klasse mit ClassMap und DiscriminateSubClassesOnColumn – SubclassMap und DiscriminatorValue
  41. TPT Entity Framework • Anpassungen der Beziehungen • ID-Spalten Book, Ebook und Hardcover entfernen NHibernate • XML-Mapping – joined-subclass • Fluent-Mapping – Root-Klasse mit ClassMap – Child-Klassen mit SubclassMap
  42. TPC Entity Framework • Anpassungen im XML notwendig, nachdem die Hierarchy definiert wurde • ID der Tabelle GUID, damit die Datensätze innerhalb der Datenbank eindeutig sind NHibernate • XML-Mapping – Variante 1 • Jede konkrete Klasse als normale Entität behandeln – Variante 2 • union-subclass • Fluent-Mapping – Nicht explizit unterstützt • Attribute-Mapping – Habe (noch) keine schöne Lösung gefunden
  43. Uff
  44. Fragen und Diskussion
  45. Ausblick • Abfragen • Lazy und Eager Loading • Debugging/Profiling • Optimierung • Concurrency • Auditing • Validierung • Caching • dnug be Screencast tv
Publicidad