0
所以我的数据模型是这样的:功能NHibernate级联保存问题,在独特的藏品非唯一对象
标题 - (有很多) - >任务 - (拥有0或1) - > COMPONENT
然而,即使每一个任务可能只有一个组件,组件可与各种任务相关联......当我执行saveOrUpdate()方法我收到以下错误:
“不同的对象有相同的标识符值已经与会话相关联“
我验证为true,因为多个TASK具有相同的COMPONENT(不同的对象实例,但内部相同)。这最初是从数据库中读出的,这是我映射的源头,但显然我错过了一些东西以便保存回数据库。
希望有人能指出我正确的方向,因为我认为做到这一点的唯一方法是分别保存COMPONENTs以冲刷每个任务之间的会话。
这里是我的映射:
HEADER
public class Header_ORM: ClassMap<Header> {
public Header_ORM() {
Table("HEADER");
Id(x => x.HeaderID).Length(8);
.
. More Mappings
.
HasMany<Task>(x => x.Tasks)
.Cascade.SaveUpdate()
.KeyColumns.Add("HeaderID")
.LazyLoad();
}
TASK
public class Task_ORM : ClassMap<Task> {
public Task_ORM() {
Table("TASK");
CompositeId(x => x.ID)
.KeyProperty(x => x.HeaderID, x => x.Length(8))
.KeyProperty(x => x.TaskID, x => x.Length(2));
Map(x => x.HeaderID).Length(8).ReadOnly();
Map(x => x.TaskID).Length(2).ReadOnly();
.
. More Mappings
.
References(x => x.EquipmentComponent)
.Cascade.SaveUpdate()
.NotFound.Ignore()
.LazyLoad()
.Columns(
"A",
"B",
"C",
.
. More Columns
.
);
}
}
COMPONENT
public class Component_ORM : ClassMap<Component> {
public Component_ORM() {
Table("COMPONENT");
CompositeId(x => x.ID)
.KeyProperty(x => x.A, x => x.Length(3))
.KeyProperty(x => x.B, x => x.Length(6))
.KeyProperty(x => x.C, x => x.Length(6))
.
. More Composite Key Columns
.
Map(x => x.A).Length(3).ReadOnly();
Map(x => x.B).Length(6).ReadOnly();
Map(x => x.C).Length(6).ReadOnly();
.
. More Mappings
.
}
}