代码之家  ›  专栏  ›  技术社区  ›  Paul Michaels

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

  •  6
  • Paul Michaels  · 技术社区  · 6 年前

    我想打个电话。Net 4.7数据访问库(使用实体框架6),来自新的Asp Net Core 2.0 Web应用程序。

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

    系统TypeLoadException:“无法加载类型” '系统。数据常见的DBProviderFactorys“来自程序集”系统。数据 版本=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,但仍会抛出错误。我已经安装了系统。数据SqlClient和系统。数据上的通用包。Net核心web应用程序。

    我还没有发现任何明确表示我尝试做的事情(通常)是不可能的,所以我的DBConfiguration实现存在一些问题。请有人给我指一下正确的方向好吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   CodeFuller    6 年前

    如果要使用具有实体框架的库,请从。Net核心应用程序,您应该针对该应用程序重新确定目标。Net框架。以下是 official source :

    要使用实体框架6,您的项目必须根据进行编译。净额 框架,因为实体框架6不支持。净核心。如果你 需要跨平台功能,您需要升级到 Entity Framework Core

    如果你检查样品。网核心项目( linked 从使用EF6库的同一文档(与您的情况完全相同)中,您将看到它的目标。Net Framework,而不是。净核心:

    <TargetFramework>net452</TargetFramework>
    

    执行此类重定目标时,不会丢失任何。您当前使用的Net核心功能。你仍然可以用我们喜欢的美味的东西。净核心。但是,您限制了可以启动应用程序的平台。仅限Net Framework。不幸的是,您目前无法解决此限制,因为它是由实体框架仅为实现这一事实造成的。Net框架。您的选择是要么转向实体框架核心,要么等到实体框架完成 will become the part 属于净标准。

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

    <TargetFramework>netcoreapp2.0</TargetFramework>
    

    <TargetFramework>net47</TargetFramework>