You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至Microsoft.EntityFrameworkCore 7.0.3后Add-Migration报‘Sequence contains no elements’错误

EF Core 7.0.3+ 执行 Add-Migration 时出现 "Sequence contains no elements" 错误的排查方向

问题背景

我有一个基于.NET 7的ASP.NET Core Web App,通过项目模板创建。除模板自带文件外,仅新增了数十个Model,并在ApplicationDbContext中通过Fluent API配置了大量数据库字段元信息,示例代码如下:

b.Property<string?>("Mailing_City")
    .HasMaxLength(50)
    .HasColumnType("VARCHAR")
    .HasColumnName("Mailing_City")
    .HasComment("Indicates the client's current city to send mail.");

创建Model过程中,多次执行添加/移除迁移、更新数据库均正常。完成所有Model后,将NuGet包更新至最新稳定版,发现任何依赖Microsoft.EntityFrameworkCore 7.0.3及以上版本的包都会导致执行Add-Migration时抛出Sequence contains no elements错误,错误栈如下:

System.InvalidOperationException: Sequence contains no elements
   at System.Linq.ThrowHelper.ThrowNoElementsException()
   at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
   at Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparer.Format(IReadOnlyModificationCommand command, StringBuilder builder)
   at Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparer.FormatCycle(IReadOnlyList`1 data)
   at Microsoft.EntityFrameworkCore.Utilities.Multigraph`2.ThrowCycle(List`1 cycle, Func`2 formatCycle, Func`2 formatException)
   at Microsoft.EntityFrameworkCore.Utilities.Multigraph`2.TopologicalSortCore(Boolean withBatching, Func`4 tryBreakEdge, Func`2 formatCycle, Func`2 formatException)
   at Microsoft.EntityFrameworkCore.Utilities.Multigraph`2.BatchingTopologicalSort(Func`4 tryBreakEdge, Func`2 formatCycle, Func`2 formatException)
   at Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparer.TopologicalSort(IEnumerable`1 commands)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.GetDataOperations(Boolean forSource, DiffContext diffContext)+MoveNext()
   at System.Linq.Enumerable.ConcatIterator`1.MoveNext()
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.GetDataOperations(IRelationalModel source, IRelationalModel target, DiffContext diffContext)+MoveNext()
   at System.Linq.Enumerable.ConcatIterator`1.MoveNext()
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Sort(IEnumerable`1 operations, DiffContext diffContext)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.GetDifferences(IRelationalModel source, IRelationalModel target)
   at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.ScaffoldMigration(String migrationName, String rootNamespace, String subNamespace, String language)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType, String namespace)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType, String namespace)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Sequence contains no elements

回退到Microsoft.EntityFrameworkCore 7.0.2版本后,迁移可正常执行。

已完成的排查

  • 检查代码中First/FirstOrDefault等方法的使用,仅模板自带的bootstrap/jquery文件中存在,无自定义代码调用问题
  • 验证数据注解格式,确保使用[Column("Msg", TypeName = "varchar")]+[MaxLength(1024)]而非[Column("Msg", TypeName = "varchar(1024)")]格式

后续排查方向

  • 检查实体循环依赖/外键配置:错误栈显示拓扑排序环节出错,可能存在实体间的循环外键依赖(如A依赖B、B依赖A),7.0.3+版本对这类场景的校验更严格。逐个检查Fluent API中的HasForeignKey、HasOne/HasMany配置,确认是否存在循环引用。
  • 排查种子数据配置:若OnModelCreating中配置了种子数据,7.0.3+版本对种子数据的处理逻辑有变更,可能因种子数据引用未初始化实体、或依赖关系异常导致拓扑排序失败。可临时注释所有种子数据,尝试执行Add-Migration验证是否恢复正常。
  • 检查复合主键/唯一约束:部分复合主键或唯一约束的配置可能在高版本中触发问题,比如未正确指定列顺序、约束涉及字段存在依赖异常。检查所有HasKey、HasIndex(IsUnique=true)的配置,确认是否存在异常。
  • 验证数据库提供器兼容性:若使用非微软官方的数据库提供器(如MySQL、PostgreSQL等),需确保提供器版本与EF Core 7.0.3+兼容,排除提供器实现问题导致的错误。
  • 清理迁移历史并重新生成:删除所有已生成的迁移文件,清空数据库中的__EFMigrationsHistory表,重新执行Add-Migration InitialCreate,排除旧迁移文件与新版本EF Core的兼容性问题。
  • 检查未映射的实体/属性:确认所有实体已正确添加到DbContext的DbSet中,或通过ModelBuilder.Entity<T>()配置,避免存在未正确映射的实体导致模型构建异常。

需要补充的信息

  • 使用的数据库提供器类型(SQL Server、MySQL等)及对应版本
  • OnModelCreating中是否配置了种子数据
  • 是否存在实体间的循环外键依赖
  • 是否使用了复合主键或自定义唯一约束
  • 项目中所有EF Core相关NuGet包的版本列表(包括Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Design、数据库提供器包等)

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:02:47