如何在ASPNET Core 2.0项目中引用的.netframework 4.6.2类库项目中使用EF6.0

时间:2018-12-07 15:22:40

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

我正在尝试在类库项目.Net Framework 4.6.2(存储库项目)中使用EF6.0,其中DBContext位于存储库旁边,并且实体是在其他项目中创建的(.NET Framework 4.6.2)使用反向代码优先POCO, 该存储库将通过在ASPNET Core 2.0 SPA项目中引用的另一个(框架4.6.2)管理器项目进行调用,其中StructureMap用作IoC。

我要面对的第一件事是将连接字符串传递给Repository Project中的DBContext的问题,因为我想在Repository Project中注册服务(DBContext,Repository),而不是从ASPNET Core Startup.cs中注册,原因是那是为了避免将DBContext暴露给前端项目,无论如何,我最终还是暂时在Repo Project中对连接字符串进行了硬编码,“感谢是否有其他方法!”

此设计面临的主要问题是,当请求发送以收集“产品”列表时,它到达了存储库项目,其中Linq语句使用_dbcontext.Product,然后引发了错误消息

  

NotSupportedException:无法确定类型为'System.Data.SqlClient.SqlClientFactory'的提供程序工厂的提供程序名称。确保已在应用程序配置中安装或注册了ADO.NET提供程序。

Entityframework是在Repository项目中注册的,而不是在ASPNET Core 2.0 Project中注册的,因为当它安装在ASPNET Core 2.0中时,它将显示Nuget冲突错误。

我也尝试从ASPNET Core2.0中的Nuget安装“ System.Data.SqlClient”,但是错误仍然抛出。

关于如何在ASPNET Core 2.0项目中引用的.netframework 4.6.2类库项目中使用EF6.0的任何想法。

1 个答案:

答案 0 :(得分:0)

Microsoft文章Get Started with ASP.NET Core and Entity Framework 6包含了从ASP.NET Core项目使用Entity Framework 6的必要步骤。

关于NotSupportedException,我将参考相关的问题System.NotSupportedException: Unable to determine the provider name for provider factory of type 'System.Data.SqlClient.SqlClientFactory'

我遇到了同样的问题,因为我未能将Core .csproj文件从<TargetFramework>netcoreapp2.2</TargetFramework>更改为<TargetFramework>net471</TargetFramework>(本文告诉我这样做,但是由于某种原因,我认为没有这样做)在Core 2.2中不是必需的)。

posted explanation/answer中,我对上面提到的问题提供了更多的解释和细节。