【发布时间】: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.Multigraph
2.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