我有 A 类和 B 类的映射,其中“一侧”是 A,“多侧”是 B。B 引用 A,其中外键不可为空。使用 FluentNH 将 A 集映射为 B 的 Cascade.Delete()。当我尝试删除 A 时,NHibernate 尝试更新 B 并将外键设置为 null。因此,由于外键不可为空,因此会发生错误。
我该怎么办?使外键可为空?
编辑:当我将外键设置为可为空时,它可以工作。但这是正确的方法吗?
最佳答案
我遇到的另一个解决方案如下:
HasMany(a => a.B).Cascade.AllDeleteOrphan().Inverse();
如果你想要a.B.Clear()删除所有B,你需要DeleteOrphan。
编辑:由于您只是级联删除,因此这里仅删除:
HasMany(a => a.B).Cascade.Delete().Inverse();
逆属性是说,对于从A到B的关系,拥有该关系的是A(即B)的逆(它在数据库中具有FK)。您可以阅读有关逆的更多信息 Inverse Attribute in NHibernate
关于NHibernate一对多关系中的删除问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289307/