2016-04-08 6 views
0

Ich habe eine Tabelle X, die Primärschlüssel "ID" ist eine Identität int-Spalte.Force NHibernate, um Identity Generator für Union-Unterklasse zu akzeptieren

Diese Tabelle ist zwei Klassen zugeordnet (einmal direkt und dann durch ein Synonym), X und ExtendedX (die X erweitern).

ExtendedX fügt nur ein paar IList, IDictionary (Eins-zu-Viele) -Eigenschaften hinzu, deshalb braucht es keine spezielle neue Spalte zusätzlich zu dem, was X bereits hat. Also machte ich ExtendedX Karte auf eine synonim von X (arround NHibernate „Tabelle bereits zugeordnet“ arbeiten Begrenzung) als „konkrete Unterklasse“ (< union-Unterklasse ...>)

Das Problem gibt, ist ein Schutz NHibernate hat in Bezug auf die Verwendung der Identität Spalte für Union-Unterklasse (ich weiß, es sieht aus wie ein Fehler, wenn Sie nicht wissen, dass beide zugeordneten Tabellen tatsächlich ein und dasselbe sind), verhindert diese Konfiguration standardmäßig.

Wie kann ich NHibernate nicht verweigern, den Identity Generator für meine konkrete Tabelle pro Unterklasse Zuordnung zu verwenden?

Antwort

1

union-subclass Funktion erfordert, dass der Schlüssel der Union-ed-Tabelle auf Einfügungen zuweisbar ist. Und ein weiterer Roadblock würde auf Einfügungen passieren, wenn Sie ihn mit einer duplizierten Nicht-Identitäts-ID spalten: Beim Einfügen würde NHibernate zwei Einfügungen in Ihrer Tabelle für eine Entität, eine Einfügung für die Basisklasse und eine weitere für die Union-ed-Unterklasse ausgeben .

Sie müssen dann noch ein bisschen mehr tricksen, indem Sie alle Basisspalten mit Ausnahme der Identität nullen können, einen Trigger zum Erkennen der zweiten Einfügung hinzufügen (würde die dup id setzen) und die dup-ID verwenden, um die Basis zu finden zeichne und aktualisiere es dementsprechend (setze seine doppelte ID-Spalte übrigens auf den Identitätswert), dann annulliere die zweite Einfügung ... Pew, es fängt an, ein großer Codierungshorror zu sein.