Невозможно Scaffold-DbContext с EntityFrameworkCore.Jet - PullRequest
0 голосов
/ 29 августа 2018

Я пытался сгенерировать модели 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 не включен для подхода с использованием базы данных?

1 Ответ

0 голосов
/ 30 августа 2018

Пересматривая эту проблему, я понял, что Конфигурация компиляции была установлена ​​на Any CPU.

Имейте в виду, что я установил office 32bit и соответствующий набор 32-битных драйверов (см. this и this )

Хотя Code First будет работать в конфигурации Any CPU, в консоли диспетчера пакетов есть проблема с этим. Похоже, что PMC пытается разрешить x64 -поставщик в этой конфигурации.

Переключение этого параметра на x86 в Visual Studio 2017 решило эту проблему:

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 и успешно очистить базу данных.

...