【发布时间】:2018-08-03 12:26:17
【问题描述】:
我知道关于这个主题的文章很多,所以我先说我仔细阅读了Google about this topic 的前两页。
很多人建议放DeleteBehavior.Restrict,dotnet ef database update 不再抱怨了。在您尝试删除记录之前,问题已解决。
我遇到了与this SO question 完全相同的问题,这与this one 重复。第二个链接中提出的解决方案是:
你应该打破这个循环。您可以通过关闭来做到这一点 级联删除(通过在 各自的关系配置)至少其中之一 关系客户->付款或客户->计费中心。
这是我目前研究的内容。
现在让我们(再次)解决问题。我有钻石关系:
所有外键必须是not null。因此,设置一个外键以允许 null 不是一种选择。我还希望该用户可以删除:
- Parameter-Value-Parts -> 没问题
- 参数值->这里没问题
OnDelete(DeleteBehavior.Cascade) - 参数-零件->这里没问题
OnDelete(DeleteBehavior.Cascade) - 参数 -> 大问题
要关注answer on this SO question,我可以用OnDelete(DeleteBehavior.Restrict) 打破Parameter-Parts 和Parameter-Value-Parts 之间的循环。
这将允许我删除Parameter,但现在我无法删除Parameter-Parts。
我可以在删除Parameter-Parts之前手动删除所有Parameter-Value-Parts,但我想避免手动删除。这可能吗?
我还阅读了 SO,应避免在应用程序中使用所有 cascade delete,开发人员应在删除行之前手动删除相关表行。什么是最佳实践?
删除级联似乎很容易解决,但我不是在寻找一个简单的解决方案,而是寻找正确的解决方案。在大型应用程序中的大型数据模型上轻松扩展的一种。
【问题讨论】:
-
真正的钻石关系不适用于简单的 ID 密钥,但据我所知,它们会带有一些共享密钥部分......
标签: sql-server entity-framework foreign-keys entity-framework-core cascading-deletes