Sql server N休眠会话。删除外键

Sql server N休眠会话。删除外键,sql-server,hibernate,c#-4.0,nhibernate,sql-delete,Sql Server,Hibernate,C# 4.0,Nhibernate,Sql Delete,我的模型中有一个名为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

我的模型中有一个名为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 delete WfActionId是表WfActions中的primery键和其他外键相同。我如何将映射更改为仅删除wftask和wfposibleactiontable

您正在使用级联的
多对一
关系,映射为

References(x => x.Action)
  .Column("WfActionId")
  .Cascade.All(); // that means, issue delete on current deletion
但是这种类型的引用(除非在
一对一
中)不应该是
.Cascade.All()
。确实可能有其他项目(同级wftasks)引用同一行/标识符

要解决您的问题,请使用此级联:

.Cascade.SaveUpdate();
添加
更新
过程中,除了删除之外,其他操作都应该按照您的预期进行。这应该单独、明确地完成。。。不是通过映射