Ich versuche, die folgende Assoziation in NHibernate (die Basis Entity-Klasse enthält eine Id-Eigenschaft, sie und die Attribute von S # arp-Architektur) zu bauenMapping kompliziert Referenzen in NHibernate
public class Terminal : Entity {
public virtual string Name { get; set; }
}
public class Order : Entity {
[NotNull]
public virtual Terminal Terminal { get; set; }
}
Wo die Daten auf Reihenfolge wird in ORDERS und Daten auf Terminals gespeichert in den TERMINALS-Tabellen gespeichert. Das Problem ist, dass es keine direkte Verbindung zwischen den beiden Tabellen gibt. Wenn ich eine ID für ORDERS.ORDER_ID hätte, würde ich die entsprechende TERMINALS-Zeile mit dem folgenden SQL holen.
select t.*
from ORDERS o
inner join cust_prod cp on (o.CUST_PROD_ID = cp.CUST_PROD_ID)
inner join customer_terminal ct on (cp.CUSTOMER_TERMINAL_ID = ct.CUSTOMER_TERMINAL_ID)
inner join terminal t on (ct.TERMINAL_ID = t.TERMINAL_ID)
where o.ORDER_ID = :p_order_id
Wie kann ich dies in NHibernate abbilden? Am besten wie kann ich dies in Fluent NHibernate abbilden, aber ich denke, ich könnte es aus dem XML herausfinden. Angesichts der Tatsache, dass die alte Datenbank, mit der ich arbeite, voller solcher Ketten ist, gibt es irgendwelche Best-Practice-Vorschläge?
Was sind die Kunden- und Auftragsklassen? – Paco
Ich weiß nicht, was du meinst. Ich gab eine vollständige Beschreibung der Auftragsklasse und während ich eine Kundenklasse habe, ist ihre Existenz orthogonal zu dem vorliegenden Problem. –
Ich sehe nicht, was Sie mit innerem Join tun cust_prod cp on (o.CUST_PROD_ID = cp.CUST_PROD_ID) und customer_terminal ct on (cp.CUSTOMER_TERMINAL_ID = ct.CUSTOMER_TERMINAL_ID) – Paco