.NET Framework 4.8 EF应用升级PostgreSQL 16后遇ProviderIncompatibleException
问题解决步骤
这个错误的核心原因是Npgsql与EntityFramework6.Npgsql的版本不匹配,导致EF6的PostgreSQL提供程序无法找到Npgsql程序集中已移除/重命名的EntityAdminDatabase属性方法。按以下步骤解决:
统一包版本:卸载当前项目中所有Npgsql、EntityFramework6.Npgsql相关包,重新安装版本完全匹配的组合。例如:
- 若安装
EntityFramework6.Npgsql 6.0.11,则必须对应安装Npgsql 6.0.11(大版本号必须一致,小版本尽量同步); - 可通过NuGet包管理器的「依赖项」查看
EntityFramework6.Npgsql对Npgsql的版本要求,严格遵循依赖关系安装。
- 若安装
清理残留程序集:删除项目的
bin、obj目录下所有文件,重新编译项目,避免旧版本dll文件残留导致版本冲突。修正配置文件:检查
app.config或web.config中的配置项:- 确保
DbProviderFactories配置正确:<system.data> <DbProviderFactories> <remove invariant="Npgsql" /> <add name="Npgsql Data Provider" invariant="Npgsql" description=".NET Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" /> </DbProviderFactories> </system.data> - 确认EF的提供程序配置指向正确的程序集:
<entityFramework> <providers> <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" /> </providers> </entityFramework>
- 确保
添加绑定重定向:若项目存在多版本程序集引用冲突,在配置文件的
<runtime>节点下添加绑定重定向,强制使用同一版本:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.11" newVersion="6.0.11" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="EntityFramework6.Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.11" newVersion="6.0.11" /> </dependentAssembly> </assemblyBinding> </runtime>注意替换示例中的版本号为你实际安装的版本。
验证目标框架:确认项目的目标框架为
.NET Framework 4.8,新版本的Npgsql和EntityFramework6.Npgsql依赖该版本的框架支持。
内容的提问来源于stack exchange,提问作者LTR
相关产品推荐
相关产品推荐

