2016-11-14 19 views
0

以下は私の親子関係クラスとマッパーです。私たちはプロジェクトでNhibernate 4.0.0.4000を使用しています。 session.Merge(Parent)を呼び出して、Dbに挿入する新しい子オブジェクトを持つ親を更新します。子オブジェクトのcode_columnにNull例外を挿入することはできません。誰かが私のマッパーコードのどの部分を間違っているのか案内できますか?Nhibernate 1対多のリレーションシップ複合キーの問題

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

実行時に、あなたの子オブジェクトは、親に対してnullでない正しい参照を持っていますか? –

+0

こんにちはDavidさん、質問してくれてありがとうございました。実行時には正解でした。これはおそらく遅延ロードのためにsession.mergeメソッドで問題が発生した複合IDでした。以下の記事では、問題と解決方法について説明しています。私はコンポジットIDのために別のクラスを作成することで同じことに続き、うまくいきました。 http://nhibernate.info/blog/2010/06/30/nhibernate-and-composite-keys.html – Babu

答えて

0

おそらく遅延ロードのためにsession.mergeメソッドで問題が発生した複合Idでした。コンポジットキーがあるときは、コンポジットキーのクラスを作成し、それをエンティティで使用しても問題ありません。

関連する問題