我正在尝试在类库项目.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的任何想法。
答案 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中,我对上面提到的问题提供了更多的解释和细节。