[英]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.