0
下面是我的父子關係類和映射。我們在我們的項目中使用Nhibernate 4.0.0.4000。當我打電話session.Merge(家長)來更新它有一個新的子對象插入到數據庫父。它引發無法爲子對象中的code_column插入Null異常。有人可以指導我的映射器代碼中的哪一部分是錯誤的嗎?NHibernate的一對多的關係複合關鍵問題
Public class parent {
public virtual string Code { get; set; }
public virtual string Desc { get; set; }
public virtual IList<Child> Children{ get; set; }
public virtual int version {get;set;}
}
Public class Child {
public virtual parent ParentObj{ get; set; }
public virtual string Code1{ get; set; }
public virtual string Code2{ get; set; }
public virtual int version {get;set;}
}
public class ParentMap : ClassMap<Parent> {
public ParentMap() {
Table("Parent_Table");
LazyLoad();
OptimisticLock.Version();
Id(x => x.Code)
.Column("Code_Column")
.Index("Code_IDX1")
.Length(5)
.Unique()
.GeneratedBy.Assigned()
.Not.Nullable();
Version(x => x.Version)
.Column("VERS")
.UnsavedValue("0");
HasMany(x => x.Children)
.AsBag()
.KeyColumn("Code_Column")
.Inverse()
.LazyLoad()
.Cascade.All();
}
}
public class ChildMap: ClassMap<Child> {
public ChildMap() {
Table("Child_Table");
LazyLoad();
OptimisticLock.Version();
CompositeId()
.KeyReference(u => u.Code, "Code_Column")
.KeyProperty(u => u.Code1, "CODE1_column")
.KeyProperty(u => u.Code2, "CODE2_column");
Version(x => x.Version)
.Column("VERS")
.UnsavedValue("0");
}
}
在運行時,你的子對象有正確的,非空,參考其母公司? –
您好大衛,謝謝你的邀請,這是在運行time.It正確的是複合標識它曾與session.merge方法可能因爲延遲加載的問題。下面的文章很好地解釋了這個問題和解決方案。我通過爲複合標識創建一個單獨的類跟蹤相同,它工作正常。 http://nhibernate.info/blog/2010/06/30/nhibernate-and-composite-keys.html – Babu