【发布时间】:2011-10-16 05:24:22
【问题描述】:
对不起,如果标题有点模糊,我有以下场景: 我的域模型中有三个表,如下所示:
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 中的数量和单位ID 以及AddingOrder 表中的订单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 和其他两个表之间没有直接的一对多映射。对于单位实体来说,这不是问题。
提前致谢;
【问题讨论】:
标签: c# nhibernate nhibernate-mapping many-to-many