我的模型中有一个名为Wftask的模型,我有外键,这是地图
Table("WfTask");
Id(m => m.Id).Column("Id");
Map(m => m.WfInstanceId);
Map(m => m.OwnerGroupId);
Map(m => m.Status);
Map(m => m.DocId);
Map(m => m.StepNo);
Map(m => m.Comment).Length(500);
Map(m => m.ActionDate);
References(x => x.Action).Column("WfActionId").Cascade.All();
References(x => x.WfState).Column("WfStateId").Cascade.All();
References(x => x.WfTaskDetail).Column("WfTaskDetailId").Cascade.All();
References(x => x.Owner).Column("OwnerId").ForeignKey("FK_Person_WfTask_OwnerId").Cascade.All();
References(x => x.Actor).Column("ActorId").ForeignKey("FK_Person_WfTask_ActorId").Cascade.All();
Map(m => m.ViewState);
Map(m => m.Deleted);
Map(m => m.Flag);
References(x => x.WfVersionId).Column("WfVersionId").Cascade.All();
// HasManyToMany(x => x.PosibleActions).Table("WfPosibleActions").ChildKeyColumn("WfActionId").ParentKeyColumn("WftaskId");
HasManyToMany(x => x.PosibleActions).Cascade.All().Table("WfPosibleActions").ChildKeyColumn("WfActionId").ParentKeyColumn("WftaskId");
}
问题是当我想删除wftask对象时,Nhibernate删除WfActionId这是表WfActions和其他外键中的主键,同样如何将我的地图更改为仅删除wftask和wfposibleactiontable
答案 0 :(得分:1)
您在many-to-one
关系上使用级联,映射为
References(x => x.Action)
.Column("WfActionId")
.Cascade.All(); // that means, issue delete on current deletion
但是那种类型的引用(除非实际上在one-to-one
中)不应该是.Cascade.All()
。确实可能有其他项(兄弟wftasks)引用相同的行/标识符
要解决您的问题,请使用此级联:
.Cascade.SaveUpdate();
应该按照您的期望(在Add
和Update
)期间执行 - 除了删除。这应该是separtely,明确地......不是通过映射