Fluent NHibernate级联删除错误

Fluent NHibernate级联删除错误,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,有人问过类似的问题,但我找不到答案,所以我来回答。我映射了以下关系: HasMany<UserFilter>(x => x.UserProjectFilters) .KeyColumns.Add("UserProfileID") .Cascade.All() .AsSet() .Inverse() .Cache.ReadWrite(); HasMany(x=

有人问过类似的问题,但我找不到答案,所以我来回答。我映射了以下关系:

HasMany<UserFilter>(x => x.UserProjectFilters)
            .KeyColumns.Add("UserProfileID")
            .Cascade.All()
            .AsSet()
            .Inverse()
            .Cache.ReadWrite();
HasMany(x=>x.UserProjectFilters)
.KeyColumns.Add(“UserProfileID”)
.Cascade.All()
1.资产()
.Inverse()
.Cache.ReadWrite();
但是,当我尝试删除父对象(过滤实体)时,删除不会层叠;我看到了异常:“DELETE语句与引用约束冲突…”。在NH Profiler中,我看到正在为父级生成Delete语句,但没有为子级生成Delete语句。我希望任何子项的删除都会在父项之前执行。我做错了什么

以下是关系的UserProfileFilter端:

References<Filter>(x => x.Filter)
            .Column("FilterID")
            .LazyLoad()
            .Cascade.SaveUpdate();
引用(x=>x.Filter)
.列(“过滤器ID”)
.LazyLoad()
.Cascade.SaveUpdate();
谢谢大家!!
Andy

我认为您需要
Cascade.AllDeleteOrphan()
,因为您已将关系设置为
Inverse()
这最终导致子表上存在多个外键的问题,并且在映射中使用了错误的键。我将上面的代码更改为以下代码,效果很好:

HasMany<UserFilter>(x => x.UserProjectFilters)
            .KeyColumns.Add("FilterID")
            .Cascade.All()
            .AsSet()
            .Inverse()
            .Cache.ReadWrite();
HasMany(x=>x.UserProjectFilters)
.KeyColumns.Add(“FilterID”)
.Cascade.All()
1.资产()
.Inverse()
.Cache.ReadWrite();
大卫,谢谢你的帮助


安迪

谢谢你的快速回复,但不幸的是,这没有起作用。我看到一个NH异常:“执行批处理查询时发生异常”,不幸的是没有innerexception。这与我一直看到的异常相同,除了AllDeleteOrphan,它没有显示外键冲突的InnerException。这似乎是一个奇怪的设置-我通常不会有M-to-1关系级联的两端。是您自己创建的模式,还是NHibernate完成的?我们手动创建了模式。如果删除子集合映射上的Cascade.SaveOrUpdate,仍然会看到错误:“DELETE语句与引用约束冲突…”。还有其他想法吗?试着将孩子引用中的.Cascade.SaveUpdate()取出,返回到过滤器中,看看它能做什么。如果你简化人际关系,它可能会帮助你解决问题。如果您查看SQL,它是否首先尝试删除父级(筛选器)?