Я пытался сгенерировать модели Entity Framework для существующей базы данных.
Я использую EntityFrameworkCore.Jet
-Provider (v2.1.0 preview 5) с EntityFrameworkCore
(v2.1.2) в Visual Studio 2017. Я использовал следующую команду в консоли диспетчера пакетов :
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 Компьютерный регистратор.
Что переводится как
Поставщик «Microsoft.ACE.OLEDB.12.0» не зарегистрирован на локальном компьютере.
Сначала я ожидал, что это будет так, и провел какое-то исследование, которое привело меня сюда , и я последовал данному решению, но проблема осталась. Просмотр в папке C:\Program Files (x86)\Common Files\microsoft shared
содержит подпапки OFFICE12
, OFFICE14
и OFFICE16
, каждая из которых содержит ACEOLEDB.DLL
.
Подтверждено с помощью подхода Code First провайдер фактически зарегистрирован и может использоваться! Но при использовании в диспетчере пакетов его невозможно найти. Я пропускаю какую-то конкретную ссылку?
Поскольку точно такая же ConnectionString работает при использовании с CodeFirst, что может быть проблемой? Или EntityFrameworkCore.Jet не включен для подхода с использованием базы данных?