NHibernate多对多关系:查询连接表的属性

时间:2011-10-16 05:24:22

标签: c# nhibernate nhibernate-mapping many-to-many

对不起,如果标题有点模糊,我有以下场景: 我的域模型中有三个表如下:     enter image description here

AddingOrder表和Product

之间存在多对多的关系

在我的产品实体中

public virtual IList<AddingOrder> AddingOrders { get; set; }

使用以下映射:

<bag name="AddingOrders" generic="true" table="AddingOrderProduct">
  <key column="ProductId"/>
  <many-to-many column="OrderId" class="Application.Domain.Entities.AddingOrder,Application.Domain"/>
</bag>

在AddingOrder实体中我有

public virtual IList<Product> Products { get; set; }

使用以下映射文件:

<bag name="Products" generic="true" table="AddingOrderProduct">
  <key column="OrderId"/>
  <many-to-many column="ProductId" class="Application.Domain.Entities.Product,Application.Domain"/>
</bag>

这是映射到连接表的实体

public class AddingOrderProduct
{
    public virtual int Id { get; private set; }
    public virtual decimal Quantity { get; set; }
    public virtual Unit Unit { get; set; }
}

及其映射:

<id name="Id" column="Id">
  <generator class="native" >
  </generator>
</id>
<property name="Quantity" type="Decimal" column="Quantity" />
<many-to-one name="Unit" column="Id" not-null="true" class="Application.Domain.Entities.Unit,Application.Domain" />

到目前为止,所有事情都很好,没有任何问题。 问题是:我如何查询连接表AddingOrderProduct上的属性并将它们与关系的另外两个连接起来?(另外两个表),我需要在此表和其他两个表之间进行额外的映射,例如,以下是一个sql查询,它返回产品列表,其中包含数量和单位属于订单#1的产品名称从加入表AddingOrderProduct和AddingOrder表中的订单ID形成产品表和数量和单位ID:

select  p.Name ,aop.Quantity ,u.Name
from   Product p 
     inner join AddingOrderProduct aop on p.Id = aop.ProductId 
     inner join AddingOrder ao on ao.Id = aop.OrderId
     inner join Unit u on u.Id = aop.UnitId
where ao.Id = 1

如何用NHibernate用上面提到的映射编写这个查询 为简单起见,我省略了很多代码,并且在AddingOrderProduct和另外两个表之间没有一对多的直接映射。对于单位实体而言,忘记它并不是问题。

提前致谢;

1 个答案:

答案 0 :(得分:1)

不要使用多对多。在代码中使用ProductAddingOrderAddingOrderProduct以及AddingOrderProduct的集合中的一对多。