我有一个用于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?
答案 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,则端口可能不是那么有问题。