执行dotnet ef database update命令报MissingMethodException异常的问题
dotnet ef database update 抛出 MissingMethodException 处理方案 故障场景
执行 dotnet ef database update 迁移命令时,项目可正常完成编译构建,但执行流程中断,抛出如下堆栈异常:
Build started... Build succeeded. info: Microsoft.EntityFrameworkCore.Infrastructure[10403] System.MissingMethodException: Method not found: 'Microsoft.EntityFrameworkCore.Storage.RelationalConnectionDependencies Microsoft.EntityFrameworkCore.Storage.RelationalConnectionDependencies.With(Microsoft.EntityFrameworkCore.Infrastructure.IDbContextOptions)'. at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.CreateReadOnlyConnection() at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteDatabaseCreator.Exists() at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists() at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration) at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
异常原因
该报错属于典型的EF Core 程序集版本不兼容问题,和业务代码、迁移脚本的逻辑正确性无关,核心触发原因是不同EF Core组件跨大版本混搭,导致运行时加载程序集时找不到匹配的方法签名。
解决操作
- 对齐项目内所有EF Core相关NuGet包的版本,确保
Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Sqlite、Microsoft.EntityFrameworkCore.Design三个包的版本号完全一致,杜绝跨大版本混搭(例如主库为5.0、Sqlite提供程序为8.0这类错位组合) - 校验全局安装的
dotnet-ef工具版本,卸载和项目EF Core版本不匹配的旧版工具,安装与项目版本完全一致的全局工具:- 移除旧工具命令:
dotnet tool uninstall --global dotnet-ef - 安装匹配版本工具命令:
dotnet tool install --global dotnet-ef --version 与项目EF Core相同的版本号
- 移除旧工具命令:
- 手动删除项目目录下的
bin、obj缓存文件夹,重新执行dotnet build完成全量编译后,再次运行迁移命令验证。
内容的提问来源于stack exchange,提问作者Bhanu
相关产品推荐
相关产品推荐

