【发布时间】:2009-06-16 21:37:36
【问题描述】:
我正在尝试在 NHibernate 中构建以下关联(基础实体类包含一个 Id 属性,它和属性来自 S#arp 架构)
public class Terminal : Entity {
public virtual string Name { get; set; }
}
public class Order : Entity {
[NotNull]
public virtual Terminal Terminal { get; set; }
}
订单数据存储在 ORDERS 中,终端数据存储在 TERMINALS 表中。问题是这两个表之间没有直接联系。如果我有 ORDERS.ORDER_ID 的 ID,我将使用以下 SQL 获取相应的 TERMINALS 行。
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
如何在 NHibernate 中映射它?最好如何在 Fluent NHibernate 中映射它,但我想我可以从 XML 中找出它。此外,鉴于我正在使用的旧数据库充满了这样的链,有什么最佳实践建议吗?
【问题讨论】:
-
客户和订单类别是什么?
-
我不明白你的意思。我给出了订单类的完整描述,虽然我有一个客户类,但它的存在与手头的问题是正交的。
-
我看不到你想对内部连接 cust_prod cp on (o.CUST_PROD_ID = cp.CUST_PROD_ID) 和 customer_terminal ct on (cp.CUSTOMER_TERMINAL_ID = ct.CUSTOMER_TERMINAL_ID) 做什么
-
我正在尝试让订单引用终端。然而,数据库的标准化很差,并且给定一个 Order.id 代替 :p_order_id 查询是我在终端上获取信息的方式。
-
无法在未映射的表上查询 nhibernate。我猜你可以创建一个普通的 sql 查询或规范化数据库
标签: nhibernate fluent-nhibernate mapping