首页 文章

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

提问于
浏览
6

我正在尝试从新的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)
    {


    }

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

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

1 回答

  • 3

    如果您想从.Net Core应用程序使用具有Entity Framework的库,则应该针对.Net Framework重新定位应用程序 . 以下是official source的引用:

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

    如果你检查.Net .Core项目的样本(来自同一文件的linked),它使用带有EF6的库(完全是你的情况),你会发现它的目标是.Net Framework,而不是.Net Core:

    <TargetFramework>net452</TargetFramework>
    

    进行此类重定向时,您不会丢失当前使用的任何.Net Core功能 . 你仍然可以使用我们喜欢的所有美味东西.Net Core . 但是,您只能将应用程序可以启动的平台限制为.Net Framework . 遗憾的是,您目前无法解决此限制,因为实体框架仅针对.Net Framework实现 . 您可以选择转向实体框架核心,也可以等待.Net标准的实体框架will become the part .

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

    <TargetFramework>netcoreapp2.0</TargetFramework>
    

    <TargetFramework>net47</TargetFramework>
    

相关问题