2

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

  • 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.Multigraph 2.ThrowCycle(List1 循环,Func 2 formatCycle, Func2 formatException)在 Microsoft.EntityFrameworkCore.Utilities.Multigraph 2.TopologicalSort(Func4 tryBreakEdge,Func 2 formatCycle, Func2 formatException)在 Microsoft。 EntityFrameworkCore.Utilities.Multigraph2.TopologicalSort(Func4 tryBreakEdge) 在 Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.GetDifferences(IRelationalModel source, IRelationalModel target) 在 Microsoft.EntityFrameworkCore.Storage 的 Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Sort(IEnumerable`1 操作,DiffContext diffContext)。 RelationalDatabaseCreator.GetCreateTablesCommands(MigrationsSqlGenerationOptions options) 在 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 有人对如何找出问题的原因有任何想法吗?

非常感谢任何帮助。

4

1 回答 1

0

This has been fixed in version 6.0.2 I can confirm.

于 2022-02-10T22:44:45.170 回答