【问题标题】:EF Core 6 - System.InvalidOperationException: Unable to save changes because a circular dependency was detected in the data to be savedEF Core 6 - System.InvalidOperationException:无法保存更改,因为在要保存的数据中检测到循环依赖
【发布时间】:2021-12-29 06:21:51
【问题描述】:

为了简单起见,假设我必须进行项目:

  • WebAPI 和
  • WebAPI 的单元测试

两个项目都使用 EF Core 5。WebAPI 使用 SqlServer,UnitTest 使用 Sqlite (inMemory)。两个项目都能正常工作。

我从 EF Core 5 迁移到 EF Core 6,现在 WebAPI 可以正常工作,但我无法执行任何单元测试。我收到以下错误:

System.InvalidOperationException:无法保存更改,因为 在要保存的数据中检测到循环依赖: 'Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation -> Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation -> Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation -> Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation'.. 在 Microsoft.EntityFrameworkCore.Utilities.Multigraph2.ThrowCycle(List1 循环,Func2 formatCycle, Func2 格式异常)在 Microsoft.EntityFrameworkCore.Utilities.Multigraph2.TopologicalSort(Func4 tryBreakEdge, Func2 formatCycle, Func2 formatException) 在 Microsoft.EntityFrameworkCore.Utilities.Multigraph2.TopologicalSort(Func4 tryBreakEdge) 在 Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Sort(IEnumerable`1 操作,DiffContext diffContext) 在 Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.GetDifferences(IRelationalModel 源,IRelationalModel 目标)在 Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.GetCreateTablesCommands(MigrationsSqlGenerationOptions 选项)在 Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.CreateTables() 在 Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.EnsureCreated() 在 Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated()

循环引用似乎发生在 Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation 内部,并且由于 WebAPI 项目有效,我认为这是 Sqlite 提供程序的问题。

在 DbContext 的 OnModelCreating 方法中执行 EF 配置时似乎会发生该错误。此时,没有尝试保存/更新和实体。 EF 配置期间单元测试失败。

在这一点上,我对如何继续一无所知。我们有大约 100 种配置,例外中没有提供更多信息。由于一切都在 EF Core 5 上运行,我假设它要么是重大更改(特定于 Sqllite),要么是 EF Core 6 中的错误。

有人遇到过这个问题吗? o 有人对如何找出问题的原因有任何想法吗?

非常感谢任何帮助。

【问题讨论】:

  • 嗯,今天在stackoverflow.com/questions/70012349/… 上查看不同的问题(EF Core 错误?)。它在不同的区域,但是这里提到的同一个 Microsoft.EntityFrameworkCore.Utilities.Multigraph 类引发了异常。所以这可能是他们使用的“拓扑排序”算法中的一个常见错误。因此,您最好去他们的 GitHub 问题跟踪器报告它,看看他们会说什么。
  • 我也有同样的问题,请问您在哪里可以找到相关信息?
  • @MicahOsborne,很遗憾,我们找不到解决方案。我们认为 SqlLite 提供程序相对较新是一个问题,因此决定暂时使用 .net 5 并等待 .net 6 进一步成熟。

标签: ef-core-6.0


【解决方案1】:

这已在 6.0.2 版本中得到修复,我可以确认。

【讨论】:

    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 2021-03-25
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多