0

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

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

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。

这转化为

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

起初我预计会是这种情况,并进行了一些研究,将我带到了这里,我遵循了给定的解决方案,但问题仍然存在。查看文件夹C:\Program Files (x86)\Common Files\microsoft shared包含子文件夹OFFICE12,每个文件夹OFFICE14都包含一个.OFFICE16ACEOLEDB.DLL

通过在 Code First 方法中使用确认,提供程序实际上已注册并且可用!但是在包管理器中使用时却找不到。我错过了一些具体的参考吗?

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

4

1 回答 1

1

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

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

虽然 Code First 将在Any 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'.

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

于 2018-08-30T14:36:01.833 回答