2
我有一個簡單的對象模型,包含多個明細行的頭。我已經將標題對象上的bag屬性映射到行類,並且還在行類上放置了標題屬性以設置雙向關係。NHibernate的一對多映射不填充袋
當我運行我的測試時,使用NHibernate Profiler,我可以看到正在執行查詢,並且從數據庫中獲取標題和行,但集合始終爲空。
當我直接查詢線對象的集合時,我可以得到它們並看到標題對象被正確填充,所以我知道映射可能是好的。
對此略有不標準的方面是線對象有一個複合鍵。 (這是一個傳統的數據庫,我不能改變這一點),所以我想知道如果這是問題。
這裏是我的類和映射(簡體)
<class name="Header" table="HEADER">
<id name="ID" column="HEAD_ID">
<generator class="assigned" />
</id>
<bag name="Lines" table="BODY" order-by="BODY_LINE">
<key column="BODY_HEADER_ID"/>
<one-to-many class="Line"/>
</bag>
</class>
<class name="Line" table="BODY">
<composite-id>
<key-property name="ID" column="BODY_HEADER_ID"/>
<key-property name="Line" column="SBODY_LINE"/>
</composite-id>
<many-to-one class="Header" name="Head" column="BODY_HEADER_ID" />
</class>
public class Header {
public virtual string ID { get; set; }
public virtual IList<Line> Lines { get; set; }
}
public class Line {
public virtual string ID { get; set; }
public virtual int Line { get; set; }
public virtual Header Head { get; set; }
public override bool Equals(object obj) {
var other = obj as Line;
return ID == other.ID && Line == other.Line;
}
public override int GetHashCode() {
return (ID + "|" + Line.ToString()).GetHashCode();
}
}
我可以通過查詢線路分開對象解決這個問題,但我想知道我在做什麼錯。
編輯:好的,當我簡化了一些東西的時候,我並沒有一直這麼做。對困惑感到抱歉。我已經改變了映射和類定義來更準確地反映事情。
也可以在關係的一邊或另一邊使用「Inverse = true」。 – apollodude217 2010-07-16 18:03:58
阿波羅是對的。袋子應該是相反的,並且可能級聯=「全部」。 – 2010-07-16 18:06:24
@Diego我只能看到HEADER表的兩個類名:Header和Payslip(其映射未顯示)。第三名在哪裏? – apollodude217 2010-07-16 18:18:55