vier Tabellen Stellen: A, B , C und D . Primärschlüssel von A Tabelle ist ID_A. Primärschlüssel von B Tabelle ist ID_B. C Tabelle hat einen zusammengesetzten Primärschlüssel (ID_A, ID_B). D Tabelle verweist alle drei anderen Tabellen und hat drei Fremdschlüssel auf zwei Spalten ID_A und ID_B. Referenzen von D Tabelle zu B und C Tabellen sind optional.fliessend NHibernate Bezug auf zusammengesetzten Schlüssel
A B C D
------- ------- ------- -------
ID_A ID_B (ID_A,ID_B)
<--------------------- ID_A
<-------- ID_B
<----------------------------------- ID_A
< - - - - - - - - - - - ID_B
< - - - -(ID_A,ID_B)
erklärte ich Zuordnungen für D Tabelle als:
mapping.References(e => e.A).Column("ID_A");
mapping.References(e => e.B).Column("ID_B");
mapping.References(e => e.C).Columns("ID_A", "ID_B");
Das Problem: Beim Versuch Zeilen auszuwählen aus D Tabelle Ich habe ORA-00918: Spalte zweideutig definiert weil Nhibernate erwähnt ID_A und ID_B Spalten zweimal in generierten SQ L Frage.
Frage: Wie soll ich Mappings für D Tabelle angeben?
Frederic, guter Rat. Leider ist es in meiner Situation nicht geeignet, da ** D.ID_B ** nullfähig ist und Referenzen von ** D ** auf ** B ** und ** C ** optional sind. Ich habe eine Frage aktualisiert. – user2291296
Nun, dann habe ich nur den klassischen Rat übrig: Vermeide den zusammengesetzten Schlüssel so gut wie möglich, benutze stattdessen den Ersatzschlüssel. Auf diese Weise haben Sie eine C-Fremdschlüsselspalte, die in D nullgültig sein kann, und einen Fremdschlüssel. B Fremdschlüssel sollte in D nicht mehr hilfreich sein. –