.NET Core 3.1升级后EF Core迁移失败问题求助
这个问题的核心原因是Npgsql.EntityFrameworkCore.PostgreSQL版本与.NET Core 3.1不兼容。你当前使用的1.1.0.0版本Npgsql EF Core驱动是为.NET Core 2.x及更早版本设计的,而.NET Core 3.1对应的EF Core 3.1对扩展接口做了更新,旧版本驱动没有实现新增的get_Info方法——这和Autofac无关,也是你移除Autofac后问题依然存在的原因。
下面是具体的解决步骤:
升级Npgsql.EntityFrameworkCore.PostgreSQL到适配版本
卸载旧版本包,安装3.1.x系列的稳定版(比如3.1.18,这是3.1分支的最终稳定版):dotnet remove package Npgsql.EntityFrameworkCore.PostgreSQL dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 3.1.18如果你习惯用NuGet包管理器,直接在Visual Studio里搜索这个包,卸载旧版本后选择3.1.x版本安装即可。
统一所有EF Core相关包版本
检查项目中Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Tools等包的版本,必须和.NET Core 3.1保持一致(即3.1.x版本)。可以用命令行查看当前包列表:dotnet list package若有版本不一致的包,同样升级到3.1.x系列。
清理并重建项目
旧的程序集缓存可能导致问题残留,执行以下命令清理并重建:dotnet clean dotnet build也可以手动删除项目根目录下的
bin和obj文件夹。重新执行迁移命令
现在再运行迁移命令应该就能正常工作了:dotnet ef migrations add Initial
另外提醒一下,后续升级.NET版本时,一定要注意第三方库的版本兼容性:EF Core驱动通常会和.NET Core的版本号保持对齐(比如.NET 5对应Npgsql EF Core 5.x,.NET 6对应6.x等),这样能避免大部分兼容性问题。
内容的提问来源于stack exchange,提问作者amiry jd




