Fluent nhibernate 如何使用FluentNHibernate删除引用的对象(旧的“已删除的对象将由cascade”重新保存)

Fluent nhibernate 如何使用FluentNHibernate删除引用的对象(旧的“已删除的对象将由cascade”重新保存),fluent-nhibernate,Fluent Nhibernate,我遇到的错误很常见,但我没有找到任何与我的场景相关的答案: 实体: 学校 教师 学生 映射: School: mapping.HasMany(x => x.Students).Cascade.AllDeleteOrphan(); Student: mapping.References(x => x.Teacher).Not.Nullable().Cascade.SaveUpdate(); mapping.References(x => x.Schoo

我遇到的错误很常见,但我没有找到任何与我的场景相关的答案:

实体:

学校 教师 学生

映射:

School:  mapping.HasMany(x => x.Students).Cascade.AllDeleteOrphan();
Student: 
      mapping.References(x => x.Teacher).Not.Nullable().Cascade.SaveUpdate();
      mapping.References(x => x.School).Not.Nullable().Cascade.SaveUpdate();
Teacher: 
      mapping.References(x => x.School).Not.Nullable().Cascade.SaveUpdate();
      mapping.HasMany(x => x.Students).Cascade.All().Inverse();
场景:学生链接到没有其他学生或教师的学校。如果我想将该学生链接到其他学校,我想删除该孤儿学校

if (oldSchool.Students.Count == 1 && oldSchool.Teachers.Count == 0)
{
    //delete it
    //oldSchool.Students.Remove(student);
    student.School = null;

    _schoolRepository.Delete(oldSchool);
}
这里发生的是,当我去保存“学生”时,我得到了可怕的“被删除的对象将被级联重新保存”错误


一如既往,非常感谢您的帮助。

您的其他映射是什么样子的?学校和学生之间的对立是什么


尝试
mapping.HasMany(x=>x.Students).Cascade.AllDeleteOrphan().Inverse()

这是涉及这些类的映射的总和。我不清楚引用场景与HasMany/hasine场景的相反方向。我会试试的。事实上,这就是我被绊倒的地方-引用没有Cascade.AllDeleteOrphan选项,也没有and Inverse()选项。好的,我应该在发布之前检查我的psuedo代码-你通常不会在引用端放置一个反向-它应该在
映射上。HasMany(x=>x.Students)
端。至于Alldelete孤儿,据我所见,你是对的。您可以做的一件事是发出实际的映射文件,调整它们直到它们工作,然后找出如何使用FNH发出调整后的文件。我已经更新了我的答案以反映这一评论。不幸的是,这不起作用-它仍然说删除的对象将通过级联重新保存。然后你需要从映射中找到它-以你想要的方式工作,然后确定让FNH为你做这件事的最佳方式。