代码之家  ›  专栏  ›  技术社区  ›  George Mauer

在NHibernate中绘制复杂参考图

  •  0
  • George Mauer  · 技术社区  · 16 年前

    我正在尝试在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.order的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中映射这个?最好是如何用FluentNHibernate映射它,但我认为我可以从XML中找到它。另外,考虑到我正在使用的遗留数据库中充满了这样的链,是否有任何最佳实践建议?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Ben    16 年前

    我很确定你的选择是:

    1)映射原始SQL(查看用于SQL查询的nhibernate文档定义: nh docs …关于映射更新/插入的部分在后面。

    或者,在中间至少引入实体来处理客户产品和客户终端中的关系。如果这些表正在为pks使用复合键,那么您将希望了解如何将复合ID和键多映射到一。

    在第二个选项中,您将在联接实体上映射一对一(或双向多个)。

    3)我从来没有看过存储过程,但我相信NH2.0+引入了更好的存储过程支持。这可能是一个可行的第三种选择。