由于循环依赖而无法保存更改

问题描述 投票:0回答:1

我在使用 EF Core 和 SQL Server 数据库的 ASP.NET Core 应用程序中遇到问题。在应用程序中,项目实体存储在名为

TProjects
的表中。另一个表
TProjectSteps
允许通过外键关系将步骤分配给项目。每个步骤都包含一个步骤编号,该编号在项目中必须是唯一的。

尝试修改和重新排序应用程序中的步骤时会出现此问题。在使用 EF Core 的后端代码中,我在项目步骤的更新端点中实现了一种算法,以检测步骤号的变化。如果步骤编号发生变化,同一项目内其他步骤的步骤编号也会相应调整。

例如,如果项目的步骤编号为 1 到 5,并且用户将步骤 1 修改为步骤编号为 5,则步骤 2 到 5 将减 1。

为了防止项目中多个步骤共享相同编号的无效情况,数据库中添加了唯一约束。

但是,自从实现这个独特的约束以来,我在保存更改时遇到了困难,导致步骤编号重新排序。例如,如果我尝试在具有 10 个步骤的项目中交换步骤 9 和 10,则在进行这些更改后调用

SaveChangesAsync()
会引发以下异常:

无法保存更改,因为在中检测到循环依赖项 要保存的数据。

EF Core 似乎无法应用这些更改,因为它无法确定应用这些更改的顺序。不幸的是,我不太确定如何解决这个问题。

有没有什么优雅的方法可以解决这个问题,而不需要临时分配未使用的步骤号来避免循环依赖?

sql-server entity-framework entity-framework-core
1个回答
0
投票

由于信息有限,我想说您可以删除该步骤的外键,看看是否可以解决问题。另一种方法是,当步骤发生变化时,您可以删除所有步骤并使用新的步骤顺序重新插入。

您可以参考这个看看是否有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.