【问题标题】:NHibernate Many-to-Many Relation: Quering the properties of the joining tableNHibernate 多对多关系:查询连接表的属性
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 所以我必须删除两个表之间的两个多对多关系,并在AddingOrderProduct 和其他两个表之间添加两个一对多关系,以便我可以查询加入表有没有办法比这个???。但我不想这样做可以像问题中提到的sql查询一样查询加入表AddingOrderProduct上的属性,谢谢
    • @MGA 是的,我不知道还有什么办法。
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2018-11-06
    相关资源
    最近更新 更多