2013-01-24 57 views
0

我不能太特別,因爲我們正在做什麼,但這裏有:如何從NHibernate中的多個表中獲取和保存單個連接的值?

我們有代表是我們的客戶,他們可以每個只能與一個公司工作,但每個公司都有自己的但是所有代表都存儲在我們的Rep表中。

我們Rep表中的PK爲RepID,但是由於其各自公司分配給他們的ID,我們也有一個varchar RepNumber

輸入表格/實體RepAddress有一個FK到Rep通過RepID,但由於遺留系統RepAddress必須有RepNumber

我試圖完成從基於RepNumberRep表能夠保存/通過設置RepNumber並得到NHibernate的得到更新RepAddress /更新的RepAddressRepID

這是我在RepAddress映射失敗嘗試:

<class name="RepAddress"> 
    <id name="AddressID"> 
     <generator class="native" /> 
    </id> 
    <property name="AddressType" column="AddressTypeID" /> 
    <property name="AttentionLine" /> 
    <property name="CareOfLine" /> 
    <property name="AddressLine1" /> 
    <property name="AddressLine2" /> 
    <property name="AddressLine3" /> 
    <property name="City" /> 
    <property name="ZipCode" /> 
    <property name="State" column="StateTypeID" /> 
    <property name="Province" column="ProvinceTypeID" /> 
    <property name="Country" column="CountryTypeID" /> 
    <property name="LastModifiedDate" /> 
    <property name="SessionActivityID" /> 

    <join table="Rep"> 
     <key column="RepID"/> 
     <property name="RepNumber" /> 
    </join> 
</class> 

任何幫助的感謝先進的!讓我知道你是否需要更多信息。

回答

0

RepAddress類應該有一個Rep實例(查找的文檔many-to-one

由於RepNumber不是PK的參考,您需要一個查詢來獲取Rep實例。然後你只需分配它。

如果你有RepID,你能做到以下幾點,這並不需要一個DB往返:

repAddress.Rep = session.Load<Rep>(repId); 
0

NHibernate的瀑布:

實體有關聯的其他對象,這可以是單個項目(多對一)或與集合的關聯(一對多,多對多)的關聯。 無論如何,你可以告訴NHibernate自動遍歷一個實體的關聯,並根據cascade選項進行操作。例如,使用save-update cascade將未保存的實體添加到集合將導致它與其父對象一起保存,而無需我們的明確指示。

0

我會說:這是純粹的商業邏輯。不要試圖讓NH爲你做這件事。

通常,當您在UI(DTO)中的數據和數據庫中的實體之間做出區別時,它會容易得多。這允許具有邏輯在將數據存儲到數據庫之前解釋來自UI的數據。當你在UI中擁有你的實體時,你很快就會迷失方向。

相關問題