使用 ASP.Net Core 2 Web App 调用使用 EF6 的完整库

Posted

技术标签:

【中文标题】使用 ASP.Net Core 2 Web App 调用使用 EF6 的完整库【英文标题】:Using an ASP.Net Core 2 Web App to call Full a library using 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 实现有问题。请有人指出我正确的方向吗?

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于使用 ASP.Net Core 2 Web App 调用使用 EF6 的完整库的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET CORE 2.2 WEB APP中的会话过期问题

ASP.NET 4.5 在 ASP.NET Core 2.0 应用程序下的 Azure Web App 中将 502.5 作为虚拟应用程序抛出

在 Asp.Net Core App 中访问 Web.config 设置?

使用 MSAL 保护 ASP.Net Core Web API 和 Angular App

在 Azure 上部署 Asp.NET Core Web App

从头编写 asp.net core 2.0 web api 基础框架