【问题标题】:Using an ASP.Net Core 2 Web App to call Full a library using EF6使用 ASP.Net Core 2 Web App 调用使用 EF6 的完整库
【发布时间】:2018-08-16 21:44:22
【问题描述】:

我正在尝试从新的 Asp Net Core 2.0 Web 应用程序调用 .Net 4.7 数据访问库(使用 Entity Framework 6)。

问题在于 EF6 似乎无法获取 DbProviderFactory。我的工作理论是,这应该在调用程序的 app/web.config 中提供。我得到的错误是:

System.TypeLoadException: '无法加载类型 来自程序集“System.Data”的“System.Data.Common.DbProviderFactories”, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089'.'

为了规避这个问题,我创建了一个 DbConfiguration 类:

public class MyDbConfiguration : DbConfiguration
{
    public MyDbConfiguration()
    {
        SetProviderFactory("System.Data.SqlClient", System.Data.SqlClient.SqlClientFactory.Instance);
        SetProviderServices("System.Data.SqlClient", SqlProviderServices.Instance);

    }
}

[DbConfigurationType(typeof(MyDbConfiguration))]
public class MyDbContext : DbContext, IMyDbContext
{
    public MyDbContext(string connectionString)
        : base(connectionString)
    {


    }

断点表明它正确执行了 MyDbConfiguration,但仍然抛出错误。我已经在 .Net Core Web 应用上安装了 System.Data.SqlClient 和 System.Data.Common 包。

我没有发现任何明确说明我想要做的事情(通常)是不可能的,所以我假设我的 DBConfiguration 实现有问题。请有人指出我正确的方向吗?

【问题讨论】:

    标签: .net asp.net-core entity-framework-6 asp.net-core-2.0 .net-4.7


    【解决方案1】:

    如果您想使用 .Net Core 应用程序中的 Entity Framework 库,您应该针对 .Net Framework 重新定位应用程序。这是来自official source 的引用:

    要使用 Entity Framework 6,您的项目必须针对 .NET 进行编译 框架,因为 Entity Framework 6 不支持 .NET Core。如果你 需要跨平台功能,您需要升级到Entity Framework Core

    如果您检查使用带有 EF6 的库(正是您的情况)的 .Net .Core 项目示例(来自同一文档的linked),您将看到它针对 .Net Framework,而不是 .Net Core:

    <TargetFramework>net452</TargetFramework>
    

    进行此类重定向时,您不会丢失当前正在使用的任何 .Net Core 功能。你仍然可以在 .Net Core 中使用我们喜欢的所有美味的东西。但是,您将应用程序可以启动的平台限制为仅 .Net Framework。不幸的是,您目前无法解决此限制,因为它是由 Entity Framework 仅针对 .Net Framework 实现的事实引起的。您的选择是转向 Entity Framework Core 或等到 .Net Standard 的 Entity Framework will become the part

    总之,要解决您当前的问题,请在您的 .Net Core csproj 文件中更改以下行:

    <TargetFramework>netcoreapp2.0</TargetFramework>
    

    <TargetFramework>net47</TargetFramework>
    

    【讨论】:

      猜你喜欢
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2021-08-22
      • 2017-06-30
      相关资源
      最近更新 更多