首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >nHibernate Cascade="Delete-Orphan“用于多个键

nHibernate Cascade="Delete-Orphan“用于多个键
EN

Stack Overflow用户
提问于 2014-11-25 04:18:32
回答 1查看 274关注 0票数 0

假设我有以下3张表:

表A、表B和表C。

表C有表A的外键。表C有表B的外键。

当我从表B中删除一行时,我希望它删除表C中的孤儿,但只有当它不包含对表A的任何引用时,我希望它删除表B中的行,并在表C中将外键设置为null。

这可能吗?它的默认行为是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-25 05:29:41

您的场景是典型的“业务需求”,而不是“级联”需求。

正如这里详细讨论的那样:When/Why to use Cascading in SQL Server? (SQL梯级删除/ NHibernate级联删除的机制相同)

  • ..。
  • 当关系的语义涉及到“是”描述的一部分时,级联删除可能是有意义的。例如,OrderLine记录是它的父订单的一部分,OrderLines永远不会在多个订单之间共享。如果命令消失了,OrderLine也应该会消失,没有订单的行将是一个问题。
  • Cascade Delete的典型示例是SomeObject和SomeObjectItems,如果没有相应的主记录,项记录的存在就没有任何意义。
  • ..。

同样,虽然这些都是关于server上的特性的,但它们也适用于NHibernate级联特性。

因此,在您的例子中,删除有一个相当复杂的逻辑,答案应该是:

  • 将删除定义移出数据层(NHibernate映射)
  • 将其放置在业务层中。在此基础上创建规则,在测试中确保您的逻辑工作正常(不管是否使用持久性引擎,即NHibernate)。
  • 未来利润从您/自定义删除逻辑,一旦用户将调整他们的需求。你不会受到NHibernate的限制.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27118745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档