entity-framework-core - 无法使用 EntityFrameworkCore.Jet 搭建 Scaffold-DbContext

标签 entity-framework-core jet-ef-provider

我一直在尝试为现有数据库生成 Entity Framework 模型。

我正在使用EntityFrameworkCore.Jet -Visual Studio 2017 中使用 EntityFrameworkCore (v2.1.2) 提供程序(v2.1.0 预览版 5)。我在包管理器控制台中使用了以下命令:

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)

Der 'Microsoft.ACE.OLEDB.12.0'-Provider ist nicht auf dem lokalen Computer registriert.

翻译过来就是

The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.

起初我预计会是这种情况,并做了一些研究,结果给我带来了 here我按照给定的解决方案进行操作,但问题仍然存在。查看文件夹 C:\Program Files (x86)\Common Files\microsoft share 包含子文件夹 OFFICE12OFFICE14OFFICE16 ,每个都包含一个 ACEOLEDB.DLL

通过在代码优先方法中使用来确认提供程序实际上已注册且可用!但在包管理器中使用时找不到它。我是否缺少一些具体的引用资料?

由于与 CodeFirst 一起使用时完全相同的 ConnectionString 正在工作,这可能是什么问题?或者 EntityFrameworkCore.Jet 未启用数据库优先方法?

最佳答案

重新审视这个问题,我意识到编译配置已设置为任何CPU

请注意,我已经安装了 office 32bit 和相应的 32 位驱动程序集(请参阅 thisthis )

虽然 Code First 将在任何 CPU 配置中运行,但 Package-Manager-Console 确实存在问题。 PMC 似乎正在尝试解析此配置中的 x64-provider。

在 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'.

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

关于entity-framework-core - 无法使用 EntityFrameworkCore.Jet 搭建 Scaffold-DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52073235/

相关文章:

visual-studio-2015 - ASP.NET 5、Entity Framework 7 和 SQL Server 2014 - 多个 dbContexts、SQL View

entity-framework - EntityFramework Core 自动迁移

c# - EntityFrameworkCore.Jet 在尝试连接到 MS Access DB 时返回错误

.net-core - 错误 使用 Scaffold-DbContext、EntityFrameworkCore.Jet、.NetCore 时,无法从程序集 System.Data 加载类型 System.Data.OleDb.OleDbConnection

entity-framework - 将 EF6 与 ASP.NET Core 结合使用

c# - 如何从登录用户添加新用户?

c# - 在 Entity Framework 核心中合并迁移

entity-framework - Microsoft Jet DB 是否与 Entity Framework 一起使用?

c# - Entity Framework 核心和 MS Access