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

.NET 8中使用EF工具创建迁移失败:空引用异常

.NET 8 EF Core 初始迁移时触发NullReferenceException错误

我创建了一个.NET 8项目,将所有模型和数据上下文迁移至Angafu.Data项目中。此前曾成功完成过相同操作,但本次执行以下命令创建初始迁移时出现错误:

dotnet ef migrations add Initial --project Angafu.Data
# 注:原命令末尾多了一个多余的"I",建议先修正该手误

命令执行输出:

Using assembly 'Angafu.Data'.
Using startup assembly 'Angafu.Data'.
Using application base 'C:\Users\moham\source\repos\angafu\Angafu.Data\bin\Debug\net8.0'.
Using working directory 'C:\Users\moham\source\repos\angafu\Angafu.Data'.
Using root namespace 'Angafu.Data'.
Using project directory 'C:\Users\moham\source\repos\angafu\Angafu.Data\'.
Remaining arguments: .
Finding DbContext classes...
Finding IDesignTimeDbContextFactory implementations...
Found IDesignTimeDbContextFactory implementation 'ApplicationDbContextFactory'.
Found DbContext 'ApplicationDbContext'.
Finding application service provider in assembly 'Angafu.Data'...
Finding Microsoft.Extensions.Hosting service provider...
No static method 'CreateHostBuilder(string[])' was found on class 'Program'.  
No application service provider was found.
Finding DbContext classes in the project...
Using DbContext factory 'ApplicationDbContextFactory'.
Using context 'ApplicationDbContext'.
Finding design-time services referenced by assembly 'Angafu.Data'...
Finding design-time services referenced by assembly 'Angafu.Data'...
No referenced design-time services were found.
Finding design-time services for provider 'Npgsql.EntityFrameworkCore.PostgreSQL'...
Using design-time services from provider 'Npgsql.EntityFrameworkCore.PostgreSQL'.
Finding IDesignTimeServices implementations in assembly 'Angafu.Data'...
No design-time services were found.
'ApplicationDbContext' disposed.

触发的异常:

System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Initialize(ColumnOperation columnOperation, IColumn column, RelationalTypeMapping typeMapping, Boolean isNullable, IEnumerable`1 migrationsAnnotations, Boolean inline)
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.InitializeColumnHelper(ColumnOperation columnOperation, IColumn column, Boolean inline)
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Diff(IColumn source, IColumn target, DiffContext diffContext)+MoveNext()
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.DiffCollection[T](IEnumerable`1 sources, IEnumerable`1 targets, DiffContext diffContext, Func`4 diff, Func`3 add, Func`3 remove, Func`4[] predicates)+MoveNext()
at System.Linq.Enumerable.ConcatIterator`1.MoveNext()
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Diff(ITable source, ITable target, DiffContext diffContext)+MoveNext()
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.DiffCollection[T](IEnumerable`1 sources, IEnumerable`1 targets, DiffContext diffContext, Func`4 diff, Func`3 add, Func`3 remove, Func`4[] predicates)+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.b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)

Object reference not set to an instance of an object.

我已尝试多种解决方案,包括更新Microsoft.EntityFrameworkCore.Design包、安装Npgsql.EntityFrameworkCore.Design包,但均未解决问题。


可能的解决方向:

  • 修正命令手误:确保执行的迁移命令没有多余字符,正确命令应为dotnet ef migrations add Initial --project Angafu.Data
  • 检查DbContext工厂实现:确认ApplicationDbContextFactory能正确初始化ApplicationDbContext,连接字符串配置有效,且未出现null引用
  • 统一包版本:确保Microsoft.EntityFrameworkCore、Npgsql.EntityFrameworkCore.PostgreSQL及相关设计包的版本均为8.x(与.NET 8匹配),避免版本不一致
  • 检查实体模型配置:排查实体类中是否存在未正确映射的属性,比如使用了不被PostgreSQL支持的类型、[Column]注解参数错误,或导航属性配置缺失
  • 清理并重建项目:删除Angafu.Data项目下的bin和obj文件夹,重新生成项目后再执行迁移命令
  • 指定上下文类型:在命令中明确指定上下文类,如dotnet ef migrations add Initial --project Angafu.Data --context ApplicationDbContext
  • 检查OnModelCreating方法:确认ApplicationDbContext的OnModelCreating方法中没有初始化null对象的代码,所有模型配置逻辑均能正常执行

内容的提问来源于stack exchange,提问作者Mohamed K. KONE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:14:50