Nhibernate一对多关系复合键问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nhibernate一对多关系复合键问题相关的知识,希望对你有一定的参考价值。

下面是我的父子关系类和映射器。我们在项目中使用Nhibernate 4.0.0.4000。当我调用session.Merge(Parent)来更新具有要插入Db的新子对象的父级时。它抛出不能为子对象中的code_column插入Null异常。有人可以指导我的映射器代码中的哪个部分是错误的吗?

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");
}

}
答案

可能是因为延迟加载而导致session.merge方法出现问题的复合Id。当您有复合键时,为复合键创建一个类,并在您的实体中使用它们可以正常工作。

以上是关于Nhibernate一对多关系复合键问题的主要内容,如果未能解决你的问题,请参考以下文章

Fluent NHibernate 多对多映射,使用自动生成的 pk 而不是复合键

Nhibernate:如何用一对多关系表示多对多关系?

单向一对多关系的流畅 NHibernate 配置 - 删除问题

NHibernate左连接选择计数在一对多关系中

NHibernate 不会删除一对多关系中的孤儿

NHibernate教程(11)--多对多关联查询