【问题标题】:Error Could not load type System.Data.OleDb.OleDbConnection from assembly System.Data when using Scaffold-DbContext, EntityFrameworkCore.Jet, .NetCore使用 Scaffold-DbContext、EntityFrameworkCore.Jet、.NetCore 时,错误无法从程序集 System.Data 加载类型 System.Data.OleDb.OleDbConnection
【发布时间】:2019-09-05 21:25:00
【问题描述】:

我正在尝试使用 Entity Framework Core 中的 Scaffold-DbContext 从现有的 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 提供程序。

x32 和 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

从 Microsoft Access Database Engine 2010 Redistributable 安装的 x64 以及来自 Office Professional Plus 32 位的 x32

Scaffold SQL 数据库工作正常。

已经去https://github.com/bubibubi/EntityFrameworkCore.Jet/wiki/Limitations

是否缺少某些东西或此设置应该可以工作?任何帮助将不胜感激。

【问题讨论】:

    标签: .net-core entity-framework-core .net-core-2.2 jet-ef-provider


    【解决方案1】:

    您需要以 .Net Framework 为目标。

    实际上 OleDb 没有移植到 .Net Core。 https://github.com/dotnet/corefx/issues/23542

    您可以尝试使用 .Net Framework 4.6 或 4.7。

    【讨论】:

    • 还是这样吗?还是 .NET core 3.1 兼容?
    • 不,不是。查看@Stephen Kennedy 的答案
    【解决方案2】:

    以下类型直到 2019 年 9 月才可用于 .NET Core(预览版除外):

    • System.Data.OleDb.OleDbCommand
    • System.Data.OleDb.OleDbCommandBuilder
    • System.Data.OleDb.OleDbConnection
    • System.Data.OleDb.OleDbDataAdapter
    • System.Data.OleDb.OleDbDataReader
    • System.Data.OleDb.OleDbParameter
    • System.Data.OleDb.OleDbParameterCollection
    • System.Data.OleDb.OleDbTransaction

    它们现在在System.Data.OleDb Nuget 包中可用,该包面向 .NET Core 2.1、.NET Framework 4.6.1、.NETStandard 2.0 和其他框架。

    如果添加此包,您现在应该能够以 .NET Core 为目标,或者,如果您愿意,可以同时针对 .NET Core 和 .NET Framework 进行多目标。

    另请参阅:导致此软件包开发和发布的GitHub issue

    【讨论】:

      【解决方案3】:

      .NET Core 的 System.Data.OleDb 现在可以在 NuGet.org 上使用:https://github.com/dotnet/runtime/issues/23321#issuecomment-502413964

      【讨论】:

        猜你喜欢
        • 2018-01-14
        • 1970-01-01
        • 2022-06-21
        • 1970-01-01
        • 2016-01-02
        • 1970-01-01
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多