【问题标题】:Cycles or multiple cascade paths SQL Server循环或多个级联路径 SQL Server
【发布时间】:2025-12-22 11:05:13
【问题描述】:

我在这个项目中使用 dotnet 和 mvc。

在我的数据模型中有多个级联路径,因此我在标题中遇到错误。当我尝试将 FK 从 Orders 表添加到 Business 表时会发生这种情况。

我的数据模型:

  • 用户 (UserId pk , ...)
  • 业务(BusinessId pk,所有者 fk 到 User(UserId),...)
  • Provider (ProviderId fk to User(UserId),....)
  • 订单(OrderId pk,BusinessId fk 到 Business(BusinessId), ProviderId fk 到 Provider(ProviderId), CustomerId fk 到 User(UserId))。

例如,假设我有一个可以管理多个理发店的网络平台。每个理发店都是我数据库中的一个企业。我网站中的用户可以是客户(User)、理发店老板(Business owner)和理发师(Provider)。

现在,您可以理解,从 user 表到 order 表有多个路径。

从 Order 到 Provider 的 FK 设置为 on delete 设置为 null。不过,因为我们有一个 FK to Business(它有一个连接到用户的所有者),所以我仍然卡住了。

错误:

执行 DbCommand 失败 (16ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
创建表 [订单]
…… );

在表“Order”上引入 FOREIGN KEY 约束“FK_Order_Business_BusinessId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

无法创建约束或索引。查看以前的错误。

正在寻找 dotnet 级别的解决方案,例如更新模型或迁移文件。我听说过触发器,但不知道如何通过 asp 实现它。

可选:我想到的想法:将订单表分为 3 个表: Orders(Orderid pk,timestamp) CustomersOrder(Order_id fk, customer_Id) BusinessOrder(Orderid fk,businessID,ProviderId)

如果你们有任何想法,我很乐意听到:)

【问题讨论】:

  • 您说您遇到了错误,但您没有告诉我们您用于获得所述错误的 SQL,或者错误是什么。如果我们不知道您在做什么或问题是什么,我们将无法帮助您。
  • 我认为这很清楚,但我也会将其添加到主帖中。当我尝试将 fk 从订单添加到业务时出现错误。
  • 不清楚,没有。你的句子说“我收到了这个错误。” 然后你永远不会产生那个错误......你也没有给出产生它的SQL。
  • 我正在使用 mvcc 和 dotnet,因此它是为我生成的。不过,我在帖子中提到它在尝试添加 fk 时会发生。
  • @Larnu 我希望现在很清楚

标签: sql-server asp.net-mvc


【解决方案1】:

我想我没有其他选择,我将 Order 的模型分为 3 个模型:Orders,CustomerOrder,BusinessOrder = 3 个表。

【讨论】:

  • 您可以简单地将 FK 配置为没有级联操作。然后你在你的应用程序中管理删除。
  • 是的,我想这也是一个不错的选择,但我希望数据库为我管理它。非常感谢您的建议!
最近更新 更多