对不起,如果标题有点模糊,我有以下场景: 我的域模型中有三个表如下:
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和另外两个表之间没有一对多的直接映射。对于单位实体而言,忘记它并不是问题。
提前致谢;
答案 0 :(得分:1)
不要使用多对多。在代码中使用Product
和AddingOrder
到AddingOrderProduct
以及AddingOrderProduct
的集合中的一对多。