1
我收到的错误是常见的,但情况我还没有找到任何答案,说我的方案:如何删除引用的对象使用FluentNHibernate(ye olde“删除的对象将重新级联”)
实体:
学校 教师 学生
映射:
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);
}
这里会发生什么事是,当我去救人“学生”,我得到了可怕的错误“已删除对象将通过级联重新保存”。
一如既往,任何帮助非常感谢。
这就是涉及这些类的映射的总和。我不清楚Inverse在参考场景与HasMany/HasOne场景中的位置。将尝试。 – sydneyos
实际上,这是我被绊倒的地方 - 参考没有Cascade.AllDeleteOrphan选项,也没有和Inverse()选项。 – sydneyos
对,我应该在发布之前检查我的伪代码 - 通常不会在引用结束时放置一个反向 - 它应该放在mapping.HasMany(x => x.Students)方面。至于AllDeleteOrphan,你从我看到的内容中得到了正确的答案。你可以做的一件事是发布实际的映射文件,调整它们直到它们工作,然后弄清楚如何使用FNH发出调整后的文件。我已更新我的回答以反映此评论。 – rbellamy