假设我有以下3个表格:
表A,表B&表C.
表C具有表A的外键。 表C具有表B的外键。
当我从表BI中删除一行时,希望它删除表C中的孤立,但前提是它不保留对表A的任何引用。如果它确实持有对表的引用AI希望它删除表B中的行,并在表C中将外键设置为null。
这甚至可能吗?它的默认行为是什么?
答案 0 :(得分:0)
您的方案是典型的“业务要求”,而不是“级联”要求。
正如此处详细讨论的那样:When/Why to use Cascading in SQL Server? (SQL级联删除/ NHibernate级联删除后面的机制相同)
- ...
- 当关系的语义可能涉及排他性“属于”描述时,级联删除可能有意义。例如,OrderLine记录是其父订单的一部分,OrderLines永远不会在多个订单之间共享。如果订单消失,OrderLine也应如此,没有订单的行将是一个问题。
- Cascade Delete的规范示例是SomeObject和SomeObjectItems,如果没有相应的主记录,项目记录就没有任何意义。
- ...
同样,虽然这些是关于SQL服务器的功能,但它们也适用于NHibernate级联功能。
所以,在你的情况下,有一个非常复杂的删除逻辑,答案应该是: