我正在尝试在类库项目.Net Framework 4.6.2(存储库项目)中使用 EF6.0,其中 DBContext 位于存储库旁边,并且实体已使用 Reverse 在不同项目(.NET Framework 4.6.2)中创建代码第一 POCO, 该存储库将通过 ASPNET Core 2.0 SPA 项目中引用的另一个(框架 4.6.2)管理器项目进行调用,其中 StructureMap 用作 IoC。
我面临的第一件事是将连接字符串传递到存储库项目内的 DBContext 的问题,因为我想在存储库项目内注册服务(DBContext,Repository)而不是从 ASPNET Core Startup.cs 中,原因是为了避免将 DBContext 暴露给前端项目,无论如何,我最终暂时在 Repo 项目中对连接字符串进行了硬编码,“感谢是否还有其他方法!”
我在这个设计中面临的主要问题是,当请求发送以收集“产品”列表时,它到达存储库项目,其中 Linq 语句使用 _dbcontext.Product ,然后抛出错误消息
NotSupportedException:无法确定“System.Data.SqlClient.SqlClientFactory”类型的提供程序工厂的提供程序名称。确保 ADO.NET 提供程序已安装或在应用程序配置中注册。
Entityframework 在 Repository 项目中注册,但不在 ASPNET Core 2.0 项目中注册,因为安装在 ASPNET Core 2.0 中时会显示 Nuget 冲突错误。
我还尝试在 ASPNET Core2.0 中从 Nuget 安装“System.Data.SqlClient”,但错误仍然抛出。
关于如何在 ASPNET Core 2.0 项目中引用的 .netframework 4.6.2 类库项目中使用 EF6.0 的任何想法。
Microsoft 文章ASP.NET Core 和 Entity Framework 6 入门 包含从 ASP.NET Core 项目使用 Entity Framework 6 所需的步骤。
关于
NotSupportedException
,我会参考相关问题System.NotSupportedException:无法确定类型为“System.Data.SqlClient.SqlClientFactory”的提供程序工厂的提供程序名称。
我遇到了同样的问题,因为我未能将 Core
.csproj
文件从 <TargetFramework>netcoreapp2.2</TargetFramework>
更改为 <TargetFramework>net471</TargetFramework>
(文章告诉我这样做,但出于某种原因,我认为在 Core 2.2 中没有必要)。
我在上面提到的问题的发布的解释/答案中提供了更多解释和详细信息。
奇怪的是,我还在构建一个 asp .net Framework 4.6.2 应用程序,为了避免这个问题,我安装了已弃用的旧版本 Microsoft.EntityFrameworkCore (2.2.6) 以及 EntityFramework 的所有其他包,例如 Microsoft.EntityFrameworkCore.Tools , Microsoft.EntityFrameworkCore.[数据库名称].
我希望这有帮助。