使用ASP.Net Core 2 Web App使用EF6调用Full库

Pau*_*els 6 .net entity-framework-6 asp.net-core asp.net-core-2.0 .net-4.7

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

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

System.TypeLoadException:'无法从程序集'System.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'加载类型'System.Data.Common.DbProviderFactories'.'

为了解决这个问题,我创建了一个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)
    {


    }
Run Code Online (Sandbox Code Playgroud)

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

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

Cod*_*ler 3

如果您想使用 .Net Core 应用程序中的实体框架库,您应该针对 .Net Framework 重新定位应用程序。以下是来自官方消息来源的引用:

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

如果您检查 .Net .Core 项目的示例(从同一文档链接),该项目使用 EF6 库(正是您的情况),您将看到它的目标是 .Net Framework,而不是 .Net Core:

<TargetFramework>net452</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

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

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

<TargetFramework>netcoreapp2.0</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

<TargetFramework>net47</TargetFramework>
Run Code Online (Sandbox Code Playgroud)