为了简单起见,假设我必须进行项目:
- 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(List
1 循环,Func2 formatCycle, Func
2 formatException)在 Microsoft.EntityFrameworkCore.Utilities.Multigraph2.TopologicalSort(Func
4 tryBreakEdge,Func2 formatCycle, Func
2 formatException)在 Microsoft。 EntityFrameworkCore.Utilities.Multigraph2.TopologicalSort(Func
4 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 有人对如何找出问题的原因有任何想法吗?
非常感谢任何帮助。