Oracle 19c与.NET Framework MVC 4.6兼容问题 寻无需升级.NET Core的方案
可行解决方案(无需升级.NET Core)
1. 同步安装匹配的EF适配包
你当前仅更新了Oracle.ManagedDataAccess 19.3.0版本,缺少.NET Framework环境下Entity Framework与Oracle对接的专属适配包,这是最常见的报错原因:
- 卸载项目中所有旧版本Oracle相关NuGet包
- 同步安装
Oracle.ManagedDataAccess19.3.0与Oracle.ManagedDataAccess.EntityFramework19.3.0两个官方包 - 在
web.config中修正提供者注册配置:
<entityFramework> <providers> <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=19.3.0.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <remove invariant="Oracle.ManagedDataAccess.Client" /> <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=19.3.0.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> </DbProviderFactories> </system.data>
2. 添加版本重定向绕过校验
Oracle 19.0.48属于19c的例行更新补丁版本,19.3.0版本的官方驱动本身支持该数据库版本,报错仅因为驱动内置的版本校验规则过于严格,可通过运行时版本重定向绕过校验:
在web.config的<runtime>节点下添加如下配置:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-19.3.0.0" newVersion="19.3.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Oracle.ManagedDataAccess.EntityFramework" publicKeyToken="89b483f429c47342" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-19.3.0.0" newVersion="19.3.0.0" /> </dependentAssembly> </assemblyBinding>
3. 降级驱动版本适配
若上述方案无效,可尝试将Oracle驱动降级为12.2.1100稳定版本,Oracle驱动支持向上兼容高版本数据库,12.2版本驱动可正常连接19c系列数据库,且不存在19.x版本驱动的严格版本校验问题。
4. 轻量替代方案
如果EF模型适配始终无法解决,可将报错对应的数据访问逻辑替换为直接使用ADO.NET编写原生SQL操作,完全避开EF与Oracle驱动的版本适配问题,整体改动量远小于全项目升级.NET Core。
内容的提问来源于stack exchange,提问作者Heitor Magaldi
相关产品推荐
相关产品推荐

