我在使用流畅的 nhibernate 级联删除时遇到问题。我确定我做错了什么,因为它不起作用。
这是我的对象:
public class Parent
{
public int Id { get; set; }
public IList<SequencedChild> SequencedChildren { get; set; }
}
public class SequencedChild
{
public int Id { get; set; }
public int ParentId { get; set; }
public int ChildId { get; set; }
public int Sequence { get; set; }
}
public class Child
{
public int Id { get; set; }
}
这是我的映射:
HasMany(m => m.SequencedChildren).Inverse().Cascade.Delete();
所以我有一个父级和一些已排序的子级,我想将该父级更新为没有子级。当我在该父项上执行没有排序子项的更新时,我希望在我的 SequencedChild
表中具有父项 ID 的记录将被删除。但出于某种原因,NHibernate 试图用 null 更新这些记录的 ParentId
- 由于 ParentId
不为 null 而失败。 编辑:我还希望 Child 对象不受影响(其行为正确)。
我看了几个问题,它们都建议使用 inverse,但我已经在这样做了。我做错了什么?
最佳答案
所以我设法找到了一个有多个步骤的解决方案:
- 正如 James 在评论中指出的那样,ParentId/ChildId 应该是父/子引用,而不仅仅是 ID(为此 +1)
SequencedChild
需要有一个将 cascade 设置为 none 的显式映射- 进行更新时,不要覆盖 SequencedChild 列表。首先清除它然后添加新项目。 (或者如果您不更换元素,只需清除)
Inverse()
调用不是必需的- db 表中的
ParentId
字段应该可以为 null,因为 nHibernate 坚持在删除它之前将其更新为 null。 (如果有人知道解决这个问题的方法,请发表评论)
关于c# - Fluent NHibernate 级联删除问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4341578/