Nhibernate一对多关系复合键问题
Nhibernate one to many relationship composite key issue
下面是我的父子关系 class 和映射器。我们在我们的项目中使用 Nhibernate 4.0.0.4000。当我调用 session.Merge(Parent) 来更新具有要插入到 Db 中的新子对象的父对象时。它抛出 cannot insert Null exception for code_column in child object。有人可以指导我的映射器代码中的哪一部分是错误的吗?
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 可能是因为延迟加载。当您有复合键时,为复合键创建一个 class 并在您的实体中使用它们,这将正常工作。
下面是我的父子关系 class 和映射器。我们在我们的项目中使用 Nhibernate 4.0.0.4000。当我调用 session.Merge(Parent) 来更新具有要插入到 Db 中的新子对象的父对象时。它抛出 cannot insert Null exception for code_column in child object。有人可以指导我的映射器代码中的哪一部分是错误的吗?
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 可能是因为延迟加载。当您有复合键时,为复合键创建一个 class 并在您的实体中使用它们,这将正常工作。