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)
Mapping
• 1 : m (Uni-/Bidirektional)
• m : n
• 1 : 1
• Selbstreferenzierung
• 1 Klasse auf mehrere Tabellen
• Mehrere Klassen auf eine Tabelle
• Vererbung: TPH, TPT, TPC
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!
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
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“
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
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]
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
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
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