升级至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
相关产品推荐
相关产品推荐

