Entity Framework: TPT / TPH-Probleme

06/07/2009 - 14:45 von Jens Duczmal | Report spam
Einen schönen guten Tag,

ein viel besserer Betreff ist mir leider nicht eingefallen :)
Ich habe ein, aus meiner Sicht, größeres Problem mit dem Entity-Framework
und der Vererbung mehrere Typen (Keine Mehrfachvererbung).

Es mag sein, das man mein Vorhaben gar nicht mit dem Framework realiseren
kann, aber ich glaube eher, es liegt an mir. Google habe ich schon durch,
aber nirgendwo ein gutes Beispiel gefunden. Zumindest keines, welches so
weit geht.

Ob es nun TPH oder TPT wird ist mir völlig Schnuppe, ich scheitere derzeit
an beiden Möglichkeiten:

Basis soll das Objekt Person (oder Anschrift) sein.
Ziel wàre es, mehrere Personen zu verwalten (oder Anschriften) wobei jede
Person nur einmal vorkommen soll. Deshalb ist dies die Basistabelle
(-Objekt)

Nun kann aber jede Person mehrere (und genau das ist der Knackpunkt) Rollen
annehmen. Belassen wir es einmal bei den Rollen Mandant und Ehepartner.

Person A ist z.B. Mandant
Person B ist ebenfalls in der Rolle eines Mandanten
aber B ist auch zeitgleich der Ehegatte von A

Die Verknüpfung von B -> A wird mir spàter sicher noch Sorgen bereiten,
aber derzeit habe ich das Problem, das ich die Pseudo-Mehrfachvererbung
nicht hinbekomme.

Wenn ich 3 Tabellen habe, Person, Mandant, Ehepartner wobei jede davon
einen Primàrschlüssel ID (Guid z.B.) hat. Dann kann ich die Problemlos
im Framwork von Person erben lassen.

Ich habe spasseshalber mal die Person, die Mandant und Ehepartner ist
hàndisch in die DB eingetragen. Wenn ich mir nun per LINQ das Person-Objekt
lade, wird mir zur Laufzeit gleich angezeigt, das es sich um den Typ
Mandant handelt. Da Mandant != Ehegatte, habe ich ein Problem. Casten geht
nicht undtja. Ich habe keinen Schimmer ob da nicht vielleicht eine
Grenze vom Entity-Framework ist.

http://mosesofegypt.net/post/Inheri...art-1.aspx
Ist zwar sehr schön geschrieben, hilft mir aber keinesfalls (wie auch die
anderen hundert Beispiele im WWW), denn hier wird immmer nur EINE Rolle
angenommen, wàhrend ich gleichzeitig mehrere Rollen benötige.

Kernproblem ist eigentlich nur, die mehrfacheingabe von Adresssen zu
vermeiden. Und ich würde das gerne direkt über das Framework lösen können.

Habt Ihr da vielleicht ein paar Tips?

Gruß und Danke schonmal vorab,
Jens Duczmal

PS: Ich hoffe der Newsreader macht umbrüche bei 80 Zeichen,
teste gerade einen neuen und bin mir nicht sicher, ob alles korrekt
eingestellt ist. (40Tude)
 

Lesen sie die antworten

#1 Elmar Boye
07/07/2009 - 10:37 | Warnen spam
Hallo Jens,

Jens Duczmal schrieb:
Ich habe ein, aus meiner Sicht, größeres Problem mit dem Entity-Framework
und der Vererbung mehrere Typen (Keine Mehrfachvererbung).



Und ich habe schon immer ein Problem, wenn jemand relationale Daten
"vererben" will.
Und IMO bedauerlicherweise mußte man bei EF wiedermal das Inheritance
als "Feature" herausstellen. Brauchen tut man es nicht, und das EF
brauchte eher einiges andere dringender.

Ob es nun TPH oder TPT wird ist mir völlig Schnuppe, ich scheitere derzeit
an beiden Möglichkeiten:



Wenn Du Dich mal abseits eines spezifischen ORMs umguckst, wirst Du feststellen,
das jeder, der etwas lànger damit arbeitet, von solchen Dingen eher abràt.

Schau Dir mal an:
http://blogs.msdn.com/alexj/archive...ategy.aspx
über die Kommentare findest Du u. a.:
http://www.xcalia.com/xdn/resources...rategy.jsp

Und das dort Java verglichen wird, spielt keine Rolle, sondern ist eher eine
Empfehlung, da ORM dort lànger praktiziert wird, lange bevor es Microsoft
für sich entdeckt hat.

Schon Scott Ambler (http://www.ambysoft.com/essays/pers...Layer.html)
hat das vor Jahren angeführt (Der Link brachte sich durch oben mal wieder
in Erinnerung).

Basis soll das Objekt Person (oder Anschrift) sein.
Ziel wàre es, mehrere Personen zu verwalten (oder Anschriften) wobei jede
Person nur einmal vorkommen soll. Deshalb ist dies die Basistabelle
(-Objekt)



Das kann man alles mit Komposita erledigen ohne jegliche Vererbung.

Kernproblem ist eigentlich nur, die mehrfacheingabe von Adresssen zu
vermeiden. Und ich würde das gerne direkt über das Framework lösen können.



Wenn Du das wie im relationalen Modell vorgesehen implementierst,
wirst Du keine Probleme haben.
Dein Domainmodell muß das zwar reflektieren, damit das Programm
"natürlich" damit umgehen kann, aber dafür kriegst Du eine
erweiterbare, flexible Lösung.

(Und ich habe Deine spàteren Sorgen gestrichen, denn solche Probleme
gibt es _ohne_ Vererbung IMO nicht).

Gruß Elmar

Ähnliche fragen