Ошибка Не удалось загрузить тип System.Data.OleDb.OleDbConnection из сборки System.Data при использовании Scaffold-DbContext, EntityFrameworkCore.Jet, .NetCore. - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь использовать Scaffold-DbContext из Entity Framework Core для создания моделей из существующей базы данных MS Access.

В консоли диспетчера пакетов при запуске команды:

Scaffold-DbContext "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Folder\Database.mdb;" EntityFrameworkCore.Jet

Я получаю следующую ошибку:

Could not load type 'System.Data.OleDb.OleDbConnection' from assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=123123123'.

Я использую проект ClassLibrary со следующей настройкой:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <PlatformTarget>AnyCPU</PlatformTarget>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="EntityFrameworkCore.Jet" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>

</Project>

Я использую EntityFrameworkCore.Jet провайдера.

Оба xle и x64 OleDb Dll находятся в машине:

C:\Program Files\Common Files\microsoft shared\OFFICE14\ACEOLEDB.DLL
C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\ACEOLEDB.DLL

x64, установленный из Microsoft Access Database Engine 2010 распространяемый и x32 от Office профессиональный плюс 32-битный

База данных Scaffold SQL работает нормально.

Уже пошли на https://github.com/bubibubi/EntityFrameworkCore.Jet/wiki/Limitations

Чего-то не хватает или эта настройка должна работать? Любая помощь будет оценена.

Редактировать

После изменения целевой структуры на net472 команда успешно выполнена.

Совет: Загрузите и установите .Net SDK, если у вас его нет https://dotnet.microsoft.com/download/dotnet-framework

Файл .csproj теперь выглядит так:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!--<TargetFramework>netcoreapp2.2</TargetFramework>-->
    <TargetFramework>net472</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <PlatformTarget>AnyCPU</PlatformTarget>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="EntityFrameworkCore.Jet" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>

</Project>

1 Ответ

1 голос
/ 16 апреля 2019

Вам нужно выбрать другой .Net Framework.

На самом деле OleDb не портирован на .Net Core. https://github.com/dotnet/corefx/issues/23542

Вы можете попробовать с .Net Framework 4.6 или 4.7.

...