2016-11-14 89 views
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"); 
} 

} 
+0

在運行時,你的子對象有正確的,非空,參考其母公司? –

+0

您好大衛,謝謝你的邀請,這是在運行time.It正確的是複合標識它曾與session.merge方法可能因爲延遲加載的問題。下面的文章很好地解釋了這個問題和解決方案。我通過爲複合標識創建一個單獨的類跟蹤相同,它工作正常。 http://nhibernate.info/blog/2010/06/30/nhibernate-and-composite-keys.html – Babu

回答

0

這是複合標識它曾與session.merge方法可能因爲延遲加載的問題。當你有組合鍵,組合鍵創建一個類,並利用它們在你的實體這將很好地工作。

相關問題