Entity framework core 无法使用EntityFrameworkCore.Jet构建DbContext

Entity framework core 无法使用EntityFrameworkCore.Jet构建DbContext,entity-framework-core,jet-ef-provider,Entity Framework Core,Jet Ef Provider,我一直在尝试为现有数据库生成实体框架模型 我正在Visual Studio 2017中将-Provider v2.1.0预览版5与EntityFrameworkCore v2.1.2一起使用。我在Package Manager控制台中使用了以下命令: PM> Scaffold-DbContext -Connection "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\..\workplace\TestProject\demo.accdb;

我一直在尝试为现有数据库生成实体框架模型

我正在Visual Studio 2017中将-Provider v2.1.0预览版5与EntityFrameworkCore v2.1.2一起使用。我在Package Manager控制台中使用了以下命令:

PM> Scaffold-DbContext -Connection "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\..\workplace\TestProject\demo.accdb;Jet OLEDB:Database Password=****;" -Provider EntityFrameworkCore.Jet -OutputDir Models -verbose
这给了我这个输出:

Using project 'TestProject'.
Using startup project 'TestProject'.
Build started...
Build succeeded.
...
Using assembly 'TestProject'.
Using startup assembly 'TestProject'.
Using application base 'C:\..\workplace\TestProject\bin\Debug'.
Using working directory 'C:\..\workplace\TestProject'.
Using root namespace 'TestProject'.
Using project directory 'C:\..\workplace\TestProject\'.
Using configuration file 'C:\..\workplace\TestProject\bin\Debug\TestProject.exe.config'.
Finding design-time services for provider 'EntityFrameworkCore.Jet'...
Using design-time services from provider 'EntityFrameworkCore.Jet'.
Finding design-time services referenced by assembly 'TestProject'.
No referenced design-time services were found.
Finding IDesignTimeServices implementations in assembly 'TestProject'...
No design-time services were found.
System.InvalidOperationException: Der 'Microsoft.ACE.OLEDB.12.0'-Provider ist nicht auf dem lokalen Computer registriert.
...
Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
“Microsoft.ACE.OLEDB.12.0”提供商不支持lokalen计算机注册

也就是说

“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册

起初,我预计会是这样,并做了一些研究,使我和我遵循给定的解决方案,但问题仍然存在。查看文件夹C:\Program Files x86\Common Files\microsoft shared包含子文件夹OFFICE12、OFFICE14和OFFICE16,每个子文件夹都包含一个ACEOLEDB.DLL

通过在代码优先的方法中使用确认,提供程序实际上已注册并可用!但在包管理器中使用时,找不到它。我遗漏了一些具体的参考资料吗


当与CodeFirst一起使用时,同样的ConnectionString也在工作,那么会出现什么问题?或者EntityFrameworkCore.Jet是否未启用数据库优先方法?

再次讨论此问题时,我意识到编译配置已设置为任何CPU

请注意,我已经安装了office 32位和相应的32位驱动程序集,请参见和

虽然代码首先将在任意CPU配置中运行,但PackageManager控制台确实存在此问题。PMC似乎正在尝试解析此配置中的x64提供程序

在Visual Studio 2017中将此设置切换到x86解决了该问题:

Using assembly 'TestProject'.
Using startup assembly 'TestProject'.
Using application base 'C:\..\workplace\TestProject\bin\x86\Debug'.
Using working directory 'C:\..\workplace\TestProject'.
Using root namespace 'TestProject'.
Using project directory 'C:\..\workplace\TestProject\'.
Using configuration file 'C:\..\workplace\TestProject\bin\x86\Debug\TestProject.exe.config'.

将Project/StartupProject的编译配置切换到x86后,PMC能够解析Microsoft.ACE.OleDb.12.0提供程序并成功构建数据库。

这有用吗?@viveknuna遗憾的是,没有,我在问题中链接的帖子中已经链接了它。正如我在问题中所说,我可以通过Microsoft.ACE.OLEDB.12.0在代码优先测试同一数据库中进行连接,因此该提供程序在该特定上下文中不可用,也不适用于整个数据库