2016-08-04 4 views
0

Ich brauche eine Tabelle namens Loan.Entity Framework Navigation Eigenschaft für ein Feld, das einen Fremdschlüssel aus zwei verschiedenen Tabellen speichern kann

Die Spalten dieser Tabelle sind: Id, Typ, BorrowId, Beschreibung

Der Trick dabei ist, dass Typ-Feld, ob der Kreditnehmer ein Mitarbeiter oder ein Kunde bestimmen, und dann wird die BorrowerId entweder eine sein ID aus der Employee-Tabelle oder eine ID aus der Customer-Tabelle.

Ist dieses schlechte Design so weit wie Entity Framework betrifft? Der Grund, den ich stelle, ist, weil es so aussieht, als ob ich keine Kreditnehmernavigationseigenschaft in der Darlehenstabelle erstellen kann, da die ID aus zwei Tabellen stammen kann.

Hat jemand eine Lösung dafür? Wie kann ich meine Datenmodelle ändern, um mit den Navigationseigenschaften zu arbeiten?

+1

Wenn Sie wissen, dass dies als * polymorphe Assoziationen * bekannt ist, werden Sie sehen, dass es viele Beiträge gibt, die dies abdecken. Treffen Sie Ihre Wahl. –

+0

Dies ist das Schlimmste an der Arbeit mit Datenbanken jetzt. Unternehmen zwingen Anwendungsentwickler, ihr Bestes in einer Datenbankumgebung zu geben, ohne dass sie normale Formulare, RI oder ein anderes wichtiges Datenbankentwicklungskonzept kennen. Infolgedessen sehen Sie eine Fülle von Anbieteranwendungen, die weit offen für die Nutzung sind. Es ist ein Job, der noch nicht definiert wurde, um die beiden Optionen zu heiraten. –

Antwort

1

Eine einfache Antwort auf Ihre Frage ist "Ja, es ist ein schlechtes Design". Die referenzielle Integrität sollte strikt durchgesetzt werden, und wenn Sie diese Fähigkeit entfernen, indem Sie die Referenz wechseln, erstellen Sie ein Fenster für Fehler. Wenn Sie zwei Optionen wünschen, erstellen Sie zwei Spalten und erstellen Sie jeweils Fremdschlüssel für die Tabellen, auf die sie verweisen. Dann wird Ihre Anwendung effektiv narrensicher sein. : D

+0

Beide Spalten wären Nullable, da es die eine oder andere richtig ist? –

+0

Ich bin kein C# Guru, also die beste Antwort, die ich geben kann, ist, dass die Klasse keine eingebaute Fähigkeit hat, zwischen NULL-fähigen und NULL-fähigen Datentypen zu unterscheiden, so dass Sie zusätzliche Logik in C# verwenden müssen. –

+0

Ja, aber was ich sagen wollte ist, dass sie beide in SQL nulblabel sind, wenn meine Geschäftslogik das eine oder andere Recht hat? –

Verwandte Themen