2010-05-15 97 views
1

我有以下映射。我希望將BasketItem映射到類「產品」。所以基本上,當我重複直通籃下我能得到的產品名稱nhibernate:一對一映射

<class name="BasketItem" table="User_Current_Basket"> 
<id name="Id" type="Int32" column="Id" unsaved-value="0"> 
<generator class="identity"/> 
</id> 
<property name="ProductId" column="Item_ID" type="Int32"/> 
    <one-to-one name="Product" 
     class="Product"></one-to-one> 
</class> 

如何specifiy該產品應Product.Id

而且我讀過,我應該避免單匹配BasketItem.ProductId一對一,只是使用一對多?如果我這樣做,我如何確保我只獲得一種產品而不是一種集合。

//編輯

select * from BasketItem 
inner join Products on BasketItem.Item_ID = Products.Item_ID 

回答

4

如何specifiy該產品應Product.Id

匹配BasketItem.ProductId

BasketItem應持有Product在對象級別,而不是ProductId 。和映射應該是:

<class name="BasketItem" table="User_Current_Basket"> 
    <id name="Id" type="Int32" column="Id" unsaved-value="0"> 
    <generator class="identity"/> 
    </id> 
    <one-to-one name="Product" class="Product"/> 
</class> 

而且我讀過,我應該避免一個對一個,只需使用一到多少?如果我這樣做,我如何確保我只獲得一種產品而不是一種集合。

如果你想能夠延遲加載的Product,喜歡「假」多到一:

<class name="BasketItem" table="User_Current_Basket"> 
    <id name="Id" type="Int32" column="Id" unsaved-value="0"> 
    <generator class="identity"/> 
    </id> 
    <many-to-one name="Product" class="Product"/> 
</class> 
+0

感謝,在問候了一對之一。 「BasketItem」如何知道它必須匹配basketItem.ProductId = product.Id上的所有產品。我已經添加了一些上面的SQL,可以清楚這一點 – frosty 2010-05-15 13:47:30

+0

@frosty嗯,這正是映射所說的,這正是NHibernate的工作(您可能需要在「一對一」中添加'column'屬性'關係,如果你不使用NHibernate的默認值)。你試過了嗎? – 2010-05-15 14:12:44

+0

謝謝,我找不到一對一的列屬性。我已經設置了多對一,它似乎工作,除了我認爲我現在有會議發佈。我發佈了一個關於此的新問題。 – frosty 2010-05-15 18:25:47