我真正使用的是哪种 Entity Framework 技术?

Which Entity Framework technology am I really using?

这听起来有点傻,但当我想到 "Entity Framework" 时,我不确定我实际使用的是什么。我注意到在搜索文档时,我经常以我根本没有或直接使用的对象和方法(例如 objectcontext、EntityState 等)结束。我也不确定在任何给定时间我使用的是哪个 Linq(Linq2SQL、Linq2Entities、Linq2Objects)。

我认为我正在使用:
数据库优先 ADO.NET 实体数据模型和 Linq to Entities。

我的设置:
Microsoft Visual Studio Professional 2015,使用从官网下载的安装程序默认安装。最新的,没有安装额外的插件、库或包。

我是做什么的:

所以我的问题是我使用了哪些不同的技术,它们之间有什么关系?

LINQ2SQL 是一种完全不同(且不再受支持)的技术,它曾经有不同的模板,有点像 EF 的 "quicker and simpler" 版本(尽管两者之间没有实际关系两个)。

LINQ2Objects是对内存中的objects/instances应用LINQ表达式的描述,与EF或L2S并不完全相同。

您确实在使用 Entity Framework 以及实体数据模型 (EDMX)。 EDMX 是旧版本 EF 的遗留物,在旧版本的 EF 中,您有一个设计界面(记得那些很酷的时候)来设计您的数据模型。使用 EF6.x,您仍然可以使用这些,它们基本上用于为您生成 .cs 文件。这不再是大多数人认为使用 EF 的 "Best Practice",现在生成模型的首选方法是使用 Code First 和 POCO。

在幕后,EF 6.x 仍然对 EDMX 范例有很多遗留依赖,因此代码优先和流畅的配置在某种程度上用于构建它,所以我不 think 两者在功能上有明显的区别。但一般来说,代码优先更容易使用、维护,并且让第 3 方更容易理解您的代码。

使用 Entity Framework 核心(以前的 Entity Framework 7),它已被完全重写并且不再支持 EDMX 模型,因此仅出于这个原因您可能会考虑放弃它们(不确定6 和 Core 之间的迁移路径是否或迁移路径是什么)。