无法使用 EntityFrameworkCore.Jet 搭建 DbContext
Unable to Scaffold-DbContext with EntityFrameworkCore.Jet
我一直在尝试为现有数据库生成 Entity Framework 模型。
我在 Visual Studio 2017 中使用 EntityFrameworkCore.Jet
-Provider(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.
转换为
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
起初我预计会出现这种情况并进行了一些研究,这让我 here 并且我遵循了给定的解决方案,但问题仍然存在。查看文件夹 C:\Program Files (x86)\Common Files\microsoft shared
包含子文件夹 OFFICE12
、OFFICE14
和 OFFICE16
,每个子文件夹都包含一个 ACEOLEDB.DLL
.
通过在代码优先方法中使用确认该提供程序实际上已注册并可用!但是在程序包管理器中使用时找不到它。我是否遗漏了一些具体的参考资料?
由于与 CodeFirst 一起使用时完全相同的 ConnectionString 正在工作,这可能是什么问题?或者 EntityFrameworkCore.Jet 没有启用数据库优先方法?
重新审视这个问题,我意识到编译配置已设置为 Any CPU
。
注意我已经安装了office 32bit
和对应的32位驱动集(见this and this)
虽然 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 的编译配置切换为 x86
PMC 能够解析 Microsoft.ACE.OleDb.12.0
提供程序并成功构建数据库。
我一直在尝试为现有数据库生成 Entity Framework 模型。
我在 Visual Studio 2017 中使用 EntityFrameworkCore.Jet
-Provider(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.
转换为
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
起初我预计会出现这种情况并进行了一些研究,这让我 here 并且我遵循了给定的解决方案,但问题仍然存在。查看文件夹 C:\Program Files (x86)\Common Files\microsoft shared
包含子文件夹 OFFICE12
、OFFICE14
和 OFFICE16
,每个子文件夹都包含一个 ACEOLEDB.DLL
.
通过在代码优先方法中使用确认该提供程序实际上已注册并可用!但是在程序包管理器中使用时找不到它。我是否遗漏了一些具体的参考资料?
由于与 CodeFirst 一起使用时完全相同的 ConnectionString 正在工作,这可能是什么问题?或者 EntityFrameworkCore.Jet 没有启用数据库优先方法?
重新审视这个问题,我意识到编译配置已设置为 Any CPU
。
注意我已经安装了office 32bit
和对应的32位驱动集(见this and this)
虽然 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 的编译配置切换为 x86
PMC 能够解析 Microsoft.ACE.OleDb.12.0
提供程序并成功构建数据库。