如何在.Net Core应用程序中使用面向实体框架.Net 4.6.1的库

时间:2018-11-09 15:20:52

标签: .net-core entity-framework-6 entity-framework-core asp.net-core-2.0 .net-4.6

我有一个用于MVC应用程序的存储库。它运行良好,没有任何问题。

当前,我正在使用.Net Core构建一个新的客户端应用程序。我引用了我现有的具有目标框架4.6.1的存储库项目。我可以毫无问题地建造。

当我尝试使用现有的数据库上下文访问数据时。我收到一条错误消息,它找不到 DefaultConnection 字符串。

public class MyAppContext : DbContext
{
   public MyAppContext():base("name=DefaultConnection"){}

这是我在config.json中拥有的连接

 "ConnectionStrings": {
     "DefaultConnection": "Data Source=[SERVER]; Initial Catalog=[CATALOG]; User ID=[USERID];
 Password=[PASSWORD];MultipleActiveResultSets=true;"   },

我向.Net Core应用程序中添加了一个app.config文件,如下图所示

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="System.Data.SqlClient" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=[SERVER]; Initial Catalog=[CATALOG]; User ID=[USERID];
 Password=[PASSWORD];MultipleActiveResultSets=true; " providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

现在我在下面出现错误

  

消息“实体框架提供程序类型   'System.Data.Entity.SqlServer.SqlProviderServices,   在应用程序配置文件中注册了EntityFramework.SqlServer   用于具有不变名称'System.Data.SqlClient'的ADO.NET提供程序   无法加载。确保程序集限定名称为   使用该程序集,并且该程序集可用于正在运行的应用程序。   有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=260882   信息。”字符串

我尝试将.net EntityFramework安装到我的.net核心应用程序中,但收到警告,说它将不完全兼容,只是版本较短,我将遇到相同的错误。

如何使.Net Core Web应用程序共享.Net 4.6库而不用重写它们以使用.Net Core?

1 个答案:

答案 0 :(得分:2)

答案为否(当前)。

尽管Entity Framework Core可以同时使用完整的NET框架和NET Core(因为它支持NET Standard),但是Entity Framework 6仅可以使用完整的NET框架。参见Compare EF Core & EF6

AFAIK有一些计划在将来(不确定何时)向EF6添加NET Core(或NET Standard)支持,目前唯一的选择是port the EF6 code to EF Core。但是请注意,它们之间存在根本差异,并且EF Core仍然不稳定(尤其是查询转换为SQL),并且如果您使用复杂的LINQ查询,可能会严重损害性能。如果将EF仅用于CRUD,则端口可能不是那么有问题。