2011-07-24 232 views
0

我無法弄清楚如何讓我正確的映射與NHibernate 3.0NHibernate的映射問題

我有兩個波蘇斯:

public class Account 
{ 
    public virtual string AccountNumber { get; set; } 

    public virtual IList<AccountSummary> AccountSummaries { get; set; } 
} 

public class AccountSummary 
{ 
    public virtual uint Id { get; protected set; } 

    public virtual string AccountNumber { get; set; } 

    public virtual DateTime TradeDate { get; set; } 
} 

我想在班這樣的表映射:

表:賬戶(柱:ACCOUNT_NUMBER)

表:account_summaries(柱:ID,柱:trade_date,柱:ACCOUNT_NUMBER)

如何避免在AccountSummary類中擁有Account對象,因爲我通常會使用一對多/多對一映射。而不是我的AccountSummary類具有Account對象,我希望AccountSummary類具有Account類的屬性,就像類定義中的AccountNumber屬性一樣,並引用了Account類。

我還想將trade_date和account_number列映射爲natural-id或unique-key。

我的映射是這樣的:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
          assembly="FundAccountDBExperiment" 
          namespace="FundAccountDBExperiment.Models"> 
    <class name="Account" table="accounts"> 
    <composite-id> 
     <key-property name="AccountNumber" column="account_number" length="40"/> 
    </composite-id> 
    <bag name="AccountSummaries" table="account_summaries" cascade="all-delete-orphan" inverse="true"> 
     <key column="account_number"/> 
     <one-to-many class="AccountSummary"/> 
    </bag> 
    </class> 
</hibernate-mapping> 

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
          assembly="FundAccountDBExperiment" 
          namespace="FundAccountDBExperiment.Models"> 
    <class name="AccountSummary" table="account_summaries"> 
    <id name="Id" column="id"> 
     <generator class="native"/> 
    </id> 
    <property name="TradeDate" column="trade_date" type="date" not-null="true"/> 
    <join table="account"> 
     <key column="acount_number"/> 
    </join> 
    </class> 
</hibernate-mapping> 

任何形式的幫助,將不勝感激。

+0

廣東話你AccountSummary的映射下,作爲acount_number一個簡單的財產? – sternr

+1

爲什麼你想「避免在AccountSummary類中擁有Account對象」呢?你試圖解決什麼是真正的問題? – Wolfgang

+0

如果我將Account映射爲AccountSummary類中的對象,則需要重構代碼。我更喜歡讓AccountSummary類具有一個AccountNumber字符串屬性,這意味着不需要重構。 – Filip

回答

1

這不就夠了嗎?

public class AccountSummary 
{ 
    public virtual uint Id { get; protected set; } 

    public virtual Account Account { get; set; } 

    public virtual string AccountNumber 
    { 
     get { return Account.AccountNumber; } 
     set { Account.AccountNumber = value; } 
    } 

    public virtual DateTime TradeDate { get; set; } 
} 

和唯一約束見 「myUniqueIndex」

<class name="AccountSummary" table="account_summaries"> 
    <id name="Id" column="id"> 
     <generator class="native"/> 
    </id> 
    <property name="TradeDate" column="trade_date" type="date" not-null="true" index="myUniqueIndex" /> 
    <many-to-one column="acount_number" lazy="false" index="myUniqueIndex"> 
    </class> 

希望這有助於

+0

感謝Firo。這就是我一直在尋找的。我試圖在一個類的屬性上設置父子關係,而不是類本身。我仍然不確定它是否可能,即在AccountSummary類中沒有Account對象的情況下設置上述關係。我想這就是爲什麼它叫做對象關係映射器,而不是屬性關係映射器? – Filip

+0

海事組織不是(優雅)的可能。但上述應該更具靈活性。您可以訪問帳戶並且不需要重構,但是當您擴展帳戶時,AccountSummary不必更改 – Firo