I've been trying to generate the Entity Framework Models for an existing Database.
I'm using the
EntityFrameworkCore.Jet-Provider (v2.1.0 preview 5) with
EntityFrameworkCore (v2.1.2) in Visual Studio 2017. I used the following command within the Package Manager Console:
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
which gave me this output:
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.
Which translates to
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
At first I expected this to be the case and did some research which brought me here and I followed the given solution, but the Problem persisted. Looking into the folder
C:\Program Files (x86)\Common Files\microsoft shared contains the subfolders
OFFICE16 which each hold an
Confirmed through use in a Code First approach the provider is actually registered and usable! But when used in the Package Manager it can't be found. Am I missing some specific reference?
Since the exact same ConnectionString is working when used with CodeFirst what could be the Issue? Or is EntityFrameworkCore.Jet not enabled for Database-First Approach?
Revisiting this Issue, I realised that the Compile Configuration had been set to
While Code First will run in the
Any CPU Configuration, the Package-Manager-Console does have a problem with this. PMC seems to be trying to resolve the
x64-provider in this configuration.
Switching this setting to
x86 in Visual Studio 2017 resolved that issue:
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'.
After switching the Compile Configuration of the Project/StartupProject to
x86 PMC is able to resolve the
Microsoft.ACE.OleDb.12.0 provider and successfully scaffold the database.