如何使用Visual Studio 2017在.Net Framework v4.6.1应用程序中安装Entity Framework

z9zf31ra  于 2023-08-07  发布在  .NET
关注(0)|答案(2)|浏览(164)

我在C#中的第一步是可怕的。
现在我正在尝试安装Entity Framework。要做到这一点,我只需转到NuGet包管理器,输入“Entity”并尝试安装第一个条目,即“Microsoft.EntityFrameworkCore”,版本v5.0.10。
失败,并显示以下错误消息:
未能安装包“Microsoft.EntityFrameworkCore 5.0.10”。您正在尝试将此程序包安装到目标为“.NETFramework,Version= v4.6.1”的项目中,但该程序包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请与软件包作者联系。
这怎么可能?.NetFramework,版本v4.6.1是我公司的默认版本,我只是在搜索结果中点击了第一个NuGet包,而Visual Studio 2017是,据我所知,一个基本的IDE。
除此之外,没有方向可走:错误消息只说“不兼容”,但没有提到.NetFramework版本太旧或太新,.Net Framework太旧或太新,...
错误消息提到“联系包作者”,但当我访问实体框架(https://learn.microsoft.com/en-us/ef/core/)的“项目URL”时,该网站甚至没有提到. NetFramework。
有人知道解决这个问题的最简单的方法吗?(我相信会建议安装另一个版本的Entity框架)
先谢了

j0pj023g

j0pj023g1#

尽管@MarcGravell的评论,EF Core在.NET Framework项目中运行良好。但不幸的是,v5只适用于支持.NET Standard 2.1的框架,不包括任何版本的.NET Framework。
.NET Standard | Microsoft Docs
对于.NET Framework项目,您可以使用的EF Core的最新版本是v3.1.19。它支持.NET Standard 2.0,技术上包括.NET Framework 4.6.1及更高版本。

Install-Package Microsoft.EntityFrameworkCore -Version 3.1.19

字符串

**注意:**正如MS文档中提到的,从.NET Framework 4.6.1应用程序中使用.NET Standard 2.0库时存在一些问题。特别是,您可能最终会引入大量的支持包。如果您能将应用程序至少升级到.NET Framework 4.7.2,那就更好了,因为它没有这些问题。

93ze6v8z

93ze6v8z2#

我已经确认,在VS 2017 Nuget包管理器中,第一个条目是“Microsoft.EntityFrameworkCore”,并且在使用.Net 4.6项目的引用时搜索“Entity”时,错误地将“Latest Stable 5.0.10”指示为适用版本。(NuGet应该基于合适的目标依赖性进行建议)
正如Richard所指出的,您可以在.Net Framework项目中使用EF Core,但限制是EF Core 3.1,因为.Net Framework仅支持.Net Standard 2.0。如果你在VS中使用包管理器UI,你需要使用“版本:”的下拉菜单来选择“3.1.19”,因为这是最后一个可以与.Net Framework 4.x一起使用的版本。
我建议在.Net Framework项目中使用EF 6,而不是EF Core 3.1,因为3.1仍然缺少EF 6中的功能。搜索“EntityFramework”将找到EF 6的“EntityFramework”。(奇怪的是,它似乎不容易出现在搜索词“实体”)
请注意,如果您的目标是.Net Framework 4.6.1,则此版本的支持将于2022年4月结束。您应该强烈考虑将目标更新到4.8或至少4.6.2。

  • 编辑(2023-07-06):* 关于EF Core 3.1缺少功能的问题...

对我来说,EF Core 3.1的交易破坏者是缺乏Table-per-Type继承(EF Core 5)和较小程度的Table-per-Concrete-Class(EF Core 7)以及多对多关系,包括没有加入实体(EF Core 5)从内存中有一些与Linq相关的查询更改,尽管老实说我不记得这是否与EF Core 3.1或2.1有关。无论哪种方式,我已经决定,EF核心3.1是不是“生产准备”的系统,我正在工作的时间。EF Core 5已经足够接近了,但我选择了EF Core 6作为第一个使用.Net Core的生产系统。
根据您的实现,EF 6中仍然有一些东西不受Core支持,例如您使用的是EDMX设计器,以及对现有实体配置的支持方面的一些差异。例如,在EF 6中,您可以使用[Key, Column("FKName1", Order=0)]注解的组合来定义复合键,而在EF Core中,您需要在OnModelCreating()中或使用IEntityTypeConfiguration显式地Map这些注解。
有一些改进可以使过渡变得有价值,例如与EF 6中旧的.Map()奇数相比,更好地支持外键的阴影属性等。
至于我会考虑使用哪个版本的EF Core,我会说至少EF Core 6。这在很大程度上源于微软致力于.Net Core支持的转变。.Net Framework 4.8和EF6.4将在未来几年内继续得到支持。(框架4.7 - 4.8尚未给出结束日期)
当迁移到.Net Core和EF Core时,您的组织必须准备好面对这样一个事实,即对当前.Net Core(以及EF Core的扩展)的支持将限于18或36个月,因此对EF Core 6的支持将于2024年11月结束,EF Core 7将于2024年5月结束(一旦最终确定.Net Core 8发布)因此,期望是您今天可以选择.Net Core / EF Core 6,但您预计将迁移到7,然后是8,然后是9等。等等,每1-2年。恕我直言,这本身并不是一件坏事 * 如果 * 微软致力于小版本,因为它们在开发社区中被广泛接受,因为它们希望没有破坏性的变化和向后兼容性。然而,他们在发布主要版本时敞开了大门,只能宣布突破性的变化和放弃支持等。随时都可以这仅仅是一种风险,而不是确定性。;)

相关问题