使用 ASP.Net Core 2 Web App 调用使用 EF6 的完整库
Posted
技术标签:
【中文标题】使用 ASP.Net Core 2 Web App 调用使用 EF6 的完整库【英文标题】:Using an ASP.Net Core 2 Web App to call Full a library using EF6 【发布时间】:2018-08-16 21:44:22 【问题描述】:我正在尝试从新的 Asp Net Core 2.0 Web 应用程序调用 .Net 4.7 数据访问库(使用 Entity Framework 6)。
问题在于 EF6 似乎无法获取 DbProviderFactory。我的工作理论是,这应该在调用程序的 app/web.config 中提供。我得到的错误是:
System.TypeLoadException: '无法加载类型 来自程序集“System.Data”的“System.Data.Common.DbProviderFactories”, 版本=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,但仍然抛出错误。我已经在 .Net Core Web 应用上安装了 System.Data.SqlClient 和 System.Data.Common 包。
我没有发现任何明确说明我想要做的事情(通常)是不可能的,所以我假设我的 DBConfiguration 实现有问题。请有人指出我正确的方向吗?
【问题讨论】:
【参考方案1】:如果您想使用 .Net Core 应用程序中的 Entity Framework 库,您应该针对 .Net Framework 重新定位应用程序。这是来自official source 的引用:
要使用 Entity Framework 6,您的项目必须针对 .NET 进行编译 框架,因为 Entity Framework 6 不支持 .NET Core。如果你 需要跨平台功能,您需要升级到Entity Framework Core。
如果您检查使用带有 EF6 的库(正是您的情况)的 .Net .Core 项目示例(来自同一文档的linked),您将看到它针对 .Net Framework,而不是 .Net Core:
<TargetFramework>net452</TargetFramework>
进行此类重定向时,您不会丢失当前正在使用的任何 .Net Core 功能。你仍然可以在 .Net Core 中使用我们喜欢的所有美味的东西。但是,您将应用程序可以启动的平台限制为仅 .Net Framework。不幸的是,您目前无法解决此限制,因为它是由 Entity Framework 仅针对 .Net Framework 实现的事实引起的。您的选择是转向 Entity Framework Core 或等到 .Net Standard 的 Entity Framework will become the part。
总之,要解决您当前的问题,请在您的 .Net Core csproj 文件中更改以下行:
<TargetFramework>netcoreapp2.0</TargetFramework>
到
<TargetFramework>net47</TargetFramework>
【讨论】:
以上是关于使用 ASP.Net Core 2 Web App 调用使用 EF6 的完整库的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET CORE 2.2 WEB APP中的会话过期问题
ASP.NET 4.5 在 ASP.NET Core 2.0 应用程序下的 Azure Web App 中将 502.5 作为虚拟应用程序抛出
在 Asp.Net Core App 中访问 Web.config 设置?
使用 MSAL 保护 ASP.Net Core Web API 和 Angular App