2011-10-16 65 views
0

很抱歉,如果標題是有點含糊,我有以下sceneraio: 我在我的域模型三個表如下: enter image description hereNHibernate的許多一對多的關係:Quering加盟表格的屬性

是有許多人在產品的實體,我有

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

與FOL的AddingOrder表和Product

之間有許多關係降脂映射:

<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表中的順序編號:

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與提到的映射 爲了簡單起見,我省略了許多代碼,AddOrderProduct和其他兩個表之間沒有直接的一對多映射。併爲單位實體忘記它,這不是一個問題。

在此先感謝;

回答

1

不要使用多對多。在代碼中使用從ProductAddingOrderAddingOrderProduct的一對多和AddingOrderProduct的集合。

+0

,所以我不得不刪除這兩個表之間兩個多對多關係和AddingOrderProduct和其他兩個表,這樣我就可以查詢在連接表的屬性之間添加兩個一個一對多reltions沒有方式比這個???。但我不想這樣做我想使用多對多的關係,它現在正在工作,我有order.Products和product.Orders和我可以查詢他們,這不是問題,問題是我如何可查詢的屬性上加入表像在問題中提到的SQL查詢AddingOrderProduct,感謝 –

+0

@MGA是的,我不知道任何其他方式。 – cremor