VS2017下.NET 4.5项目使用JetEntityFrameworkProvider报提供者名称识别错误如何解决?
报错原因与修复方案
根因
你的配置缺失Entity Framework配置节注册,且使用外部连接初始化DbContext时未显式绑定Jet Provider标识,同时可能存在依赖包版本不兼容问题,导致EF无法识别已注册的JetEntityFrameworkProvider。
修复步骤
- 确认依赖版本匹配
.NET Framework 4.5仅支持JetEntityFrameworkProvider 1.2.3及更早版本,更高版本仅适配.NET Framework 4.6.1+,同时需保证Entity Framework版本在6.2.0~6.4.4区间,版本不匹配会导致注册的Provider无法被EF加载。 - 补充DbContext显式Provider声明
你当前使用外部DbConnection初始化DbContext时,EF无法自动关联到已注册的Jet Provider,需要修改ORM类的带参构造函数,显式指定Provider的invariantName:
Partial Public Class ORM Inherits DbContext ' 原有无参构造函数保留即可 Public Sub New() MyBase.New() Database.SetInitializer(New NullDatabaseInitializer(Of ORM)) End Sub ' 修改带参构造函数,第二个参数传入Jet的invariantName Public Sub New(con As Common.DbConnection) MyBase.New(con, "JetEntityFrameworkProvider") Database.SetInitializer(New NullDatabaseInitializer(Of ORM)) End Sub ' ... 其余代码保留 End Class
- 补全app.config的配置节声明
你当前的app.config缺失entityFramework的配置节注册,必须放在configuration节点下的第一个位置,完整配置如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- 缺失的配置节必须放在最顶部 --> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" requirePermission="false" /> </configSections> <entityFramework> <providers> <provider invariantName="JetEntityFrameworkProvider" type="JetEntityFrameworkProvider.JetProviderServices, JetEntityFrameworkProvider" /> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/> </providers> </entityFramework> <system.data> <DbProviderFactories> <remove invariant="JetEntityFrameworkProvider"/> <add invariant="JetEntityFrameworkProvider" name="Jet Entity Framework Provider" description="Jet Entity Framework Provider" type="JetEntityFrameworkProvider.JetProviderFactory, JetEntityFrameworkProvider"/> </DbProviderFactories> </system.data> </configuration>
- 确认运行时依赖安装
根据你的程序生成架构(x86/x64)安装对应版本的Microsoft Access Database Engine 2010 可再发行组件,避免Jet Provider找不到底层Access驱动。 - 清理缓存重新编译
关闭VS后删除项目根目录下的bin、obj文件夹,重启VS重新编译即可解决配置缓存导致的加载失效问题。
内容的提问来源于stack exchange,提问作者Wojciech Szczurek
相关产品推荐
相关产品推荐

