我在使用 EF Core 和 SQL Server 数据库的 ASP.NET Core 应用程序中遇到问题。在应用程序中,项目实体存储在名为
TProjects
的表中。另一个表 TProjectSteps
允许通过外键关系将步骤分配给项目。每个步骤都包含一个步骤编号,该编号在项目中必须是唯一的。
尝试修改和重新排序应用程序中的步骤时会出现此问题。在使用 EF Core 的后端代码中,我在项目步骤的更新端点中实现了一种算法,以检测步骤号的变化。如果步骤编号发生变化,同一项目内其他步骤的步骤编号也会相应调整。
例如,如果项目的步骤编号为 1 到 5,并且用户将步骤 1 修改为步骤编号为 5,则步骤 2 到 5 将减 1。
为了防止项目中多个步骤共享相同编号的无效情况,数据库中添加了唯一约束。
但是,自从实现这个独特的约束以来,我在保存更改时遇到了困难,导致步骤编号重新排序。例如,如果我尝试在具有 10 个步骤的项目中交换步骤 9 和 10,则在进行这些更改后调用
SaveChangesAsync()
会引发以下异常:
无法保存更改,因为在中检测到循环依赖项 要保存的数据。
EF Core 似乎无法应用这些更改,因为它无法确定应用这些更改的顺序。不幸的是,我不太确定如何解决这个问题。
有没有什么优雅的方法可以解决这个问题,而不需要临时分配未使用的步骤号来避免循环依赖?
由于信息有限,我想说您可以删除该步骤的外键,看看是否可以解决问题。另一种方法是,当步骤发生变化时,您可以删除所有步骤并使用新的步骤顺序重新插入。
您可以参考这个看看是否有帮助。