簡體   English   中英

NHibernate映射多個關系

[英]NHibernate mapping multiple relationships

以下方案的正確HBM映射是什么?

我需要將數據庫中的ValueItem限定為收入或費用項目,以便NHibernate在加載時將其加載到正確的列表中。

問題是:從數據庫檢索Container時,IncomeItems和ExpenseItems集合的內容相同。

設計

C#

public class Container
{
    public virtual IList<ValueItem> IncomeItems { get; set; }
    public virtual IList<ValueItem> ExpenseItems { get; set; }
}

public class ValueItem
{
    public virtual double Amount { get; set; }
    public virtual string Description { get; set; }
}

HBM

<class name="Container">
    <id name="Id">
        <generator class="hilo" />
    </id>

    <list name="IncomeItems " cascade="all-delete-orphan">
        <key column="ContainerId" />
        <index column="ItemIndex" />
        <one-to-many class="ValueItem"/>
    </list>

    <list name="ExpenseItems " cascade="all-delete-orphan">
        <key column="ContainerId" />
        <index column="ItemIndex" />
        <one-to-many class="ValueItem"/>
    </list> 
</class>


<class name="ValueItem">
    <id column="Id" type="int">
      <generator class="hilo" />
    </id>

    <property name="Amount" />
    <property name="Description" />
</class>    

Don關於NHUsers的回答解決了我的問題:

不要回答:

我有一個與您類似的映射,除了我使用包而不是列表,我有inverse =“ true”,級聯設置為默認值,我明確設置了表名,每個鍵都有不同的列名,並且引用返回到您的容器,每個容器都有唯一的名稱。 也許是inverse = true或不同的列名稱。

對不起,霍基類名稱。 我當場從realdomain對象名稱中更改了它們,但我並不覺得很有創造力。 希望這可以幫助,

<class name="Form" >
    <many-to-one name="CreatorPerson" class="Person" />
    <many-to-one name="ProcessorPerson" class="Person" />
</class>

<class name="Person">
    <bag name="FormsCreated" inverse="true">
        <key>
            <column name="CreatorPersonId" not-null="true" />
        </key>
        <one-to-many class="Person" />
    </bag>
    <bag name="FormsToProcess" inverse="true">
        <key>
            <column name="ProcessorPerson" not-null="true" />
        </key>
        <one-to-many class="Person" />
    </bag>
</class> 

您可以選擇適當的繼承策略: http : //nhibernate.info/doc/nh/en/index.html#inheritance

或者,如果您的架構無法更改。 您可以指定where你的列表映射屬性。 這些將指定如何獲取它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM