我一直在尝试为现有数据库生成实体框架模型。
我在Visual Studio 2017中使用EntityFrameworkCore.Jet
-Provider(v2.1.0预览版5)和EntityFrameworkCore
(v2.1.2)。我在Package Manager控制台中使用了以下命令:< / p>
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'-提供者nicht auf dem lokalen计算机注册商。
翻译成
“ Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册。
起初,我希望情况确实如此,并做了一些研究,使我here和我遵循了给定的解决方案,但是问题仍然存在。在文件夹C:\Program Files (x86)\Common Files\microsoft shared
中查找包含子文件夹OFFICE12
,OFFICE14
和OFFICE16
的子文件夹,每个子文件夹包含一个ACEOLEDB.DLL
。
通过在“代码优先”方法中使用进行了确认提供商实际上已注册并且可以使用!,但是在“程序包管理器”中使用时找不到。我是否缺少一些具体参考?
由于与CodeFirst一起使用时,完全相同的ConnectionString可以工作,因此可能是什么问题?还是未为数据库优先方法启用EntityFrameworkCore.Jet?
答案 0 :(得分:1)
回顾此问题,我意识到编译配置已设置为Any CPU
。
请注意,我已经安装了office 32bit
和相应的32位驱动程序集(请参见this和this)
虽然“代码优先”将在Any CPU
配置中运行,但是Package-Manager-Console确实存在问题。 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
提供程序并成功搭建数据库。