流畅的NHibernate级联删除错误

时间:2011-03-31 14:33:01

标签: nhibernate fluent-nhibernate

已经提出了类似的问题,但我没有找到答案,所以这里有。我有以下Fluent关系映射:

HasMany<UserFilter>(x => x.UserProjectFilters)
            .KeyColumns.Add("UserProfileID")
            .Cascade.All()
            .AsSet()
            .Inverse()
            .Cache.ReadWrite();

当我尝试删除父(Filter实体)时,删除不会级联;我看到了异常:“DELETE语句与REFERENCE约束冲突......”。在NH Profiler中,我看到正在为父级生成Delete语句,但没有为子级生成。我希望任何孩子的删除都能在父母之前执行。我做错了什么?

这是关系的UserProfileFilter结束:

References<Filter>(x => x.Filter)
            .Column("FilterID")
            .LazyLoad()
            .Cascade.SaveUpdate();

谢谢! 安迪

2 个答案:

答案 0 :(得分:1)

我认为您需要Cascade.AllDeleteOrphan(),因为您已将关系设置为Inverse()

答案 1 :(得分:1)

这最终成为子表上多个外键的问题,并且映射中使用了错误的键。我将上面的代码更改为以下代码,它运行得很好:

HasMany<UserFilter>(x => x.UserProjectFilters)
            .KeyColumns.Add("FilterID")
            .Cascade.All()
            .AsSet()
            .Inverse()
            .Cache.ReadWrite();

感谢David的帮助!

安迪