Cześć,
Mam klasę Pracownik, Kontrahent oraz Dokument. Klasa Dokument powinna być powiązana z Pracownikiem lub Kontrahentem w zależności kto został wskazany.
W jaki sposób zrobić, w EF aby Tabela Dokument zawierała jedną kolumnę z typem obiektu (1 gdy Pracownik 2 gdy Kontrahent) oraz jedną kolumnę z Id Pracownika lub Kontrahenta - w zależności jaki typ obiektu jest powiązany z danym rekordem?
Ja bym sympatyzował ze stringiem.
Część obiektowa (zabezpiecz sobie na null'e )
class DocumentParent {
DocumentParent( IParent ... );
string ParentType {
get {
return parent.GetType().Name;
}
}
int ParentId {
get {
return parent.ID
}
}
}
co by w bazie skutkowało parą "Kontrahent ", 2317
I tu mam lukę, mało wiem o EF - grałem ten trick w innych frameworkach. Jakoś trzeba spowodować, aby taki "compuond" czy "emebedded" object zadziałał.
DISCLAIMER:
oczywiście wiesz, że cała ochrona referencji ze strony bazy danych itd ... idzie się kochać ?
Możesz skasować "klucz obcy" bez najmniejszego ostrzeżenia.
Czemu potrzebujesz kolumny z typem obiektu?
Mając w klasie Dokument
właściwość Id
do Pracownik\Kontrahent
możesz utworzyć relację One-to-One.
Następnie pobierając Dokument
z bazy zaciągniesz też odpowiedni obiekt Pracownik\Kontrahent
i w logice aplikacji zrobisz z tym co chcesz.
Może rozwiń swój problem to coś doradzimy więcej.