使用ASP.Net Core 2 Web应用程序调用使用EF6的完整库

6
我正在尝试从新的Asp Net Core 2.0 Web应用程序调用一个使用Entity Framework 6的.Net 4.7数据访问库。问题在于EF6似乎无法获取DbProviderFactory。我的工作理论是,这应该在调用程序的app/web.config中提供。我收到的错误是:
System.TypeLoadException: 'Could not load type 'System.Data.Common.DbProviderFactories' from assembly 'System.Data, Version=4.0.0.0, Culture=neutral, 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个回答

3
如果你想从 .Net Core 应用程序中使用 Entity Framework 库,你应该将应用程序重新针对 .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>

当进行此类重新定向时,您不会失去当前使用的任何 .Net Core 功能。您仍然可以使用 .Net Core 中我们所喜欢的所有精彩功能。但是,您将限制应用程序启动的平台为仅 .Net Framework。不幸的是,目前您无法解决这个限制,因为实体框架只针对 .Net Framework 实现。您的选择要么是转向实体框架 Core,要么等到实体框架成为 .Net Standard 的一部分。(请参阅) 总之,为了解决当前的问题,请更改 .Net Core csproj 文件中的以下行:
<TargetFramework>netcoreapp2.0</TargetFramework>

to

<TargetFramework>net47</TargetFramework>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接