<class name="ReportRow">
<bag name="Marks" cascade="save-update" inverse="true">
<key column="ReportRowId"/>
<one-to-many class="Mark"/>
</bag>
</class>
// C# code
public virtual IList<Mark> Marks { get; set; }
一個ReportRow(父)和馬克(子)之間的關係,但它沒有被保存(在標記表,ReportRowId總是空值)。
我知道這些關係始終是雙向的,因爲NHibernate的「怪癖」,所以我的馬克I類有:
<many-to-one name="ReportRow" class="ReportRow" column="ReportRowId" />
// C#
public virtual ReportRow ReportRow { get; set; }
我甚至有這種關係的其他地方工作的其他一些例子在我的項目中,但這一個是行不通的,我看不到任何區別...
... Mark和ReportRow都有子類(例如ModuleMark和ModuleReportRow),我正在使用實現繼承的聯合子類策略。
會有什麼關係嗎?對於關係的兩端,映射都是在父類映射中定義的,而不是嵌套在映射中。
感謝
哦,它的工作原理,如果我先救行(所以它有一個ID - session.Save(myRow)),然後將行添加到標記(mark.Row = myrow)並保存標記(session.Save(標記)),然後將該標記添加到該行的集合(row.Marks.Add(mark)),然後保存該行(再次)。似乎有點複雜,但我做對了嗎? – Richard
有這一行的文檔:「與逆關聯映射一端=」 true「不會影響級聯操作,二者是不同的概念!」從這裏:http://nhforge.org/doc/nh/en/index.html#collections-bidirectional。我不應該期望級聯在這種情況下出於某種原因工作嗎?我不明白爲什麼。 – Richard
對不起,正確的順序是:保存行,將行添加到標記,保存標記。這比我在第一條評論中所說的要簡單。仍然不明白爲什麼我不能走另一條路,只是將它從行中逐漸降格到標記。 – Richard