EF 模型存储应用程序类和属性如何映射到数据库表和列的详细信息。 创建 EF 模型有两种主要方法:
使用 Code First:开发人员编写代码来指定模型。 EF 根据开发人员提供的实体类和其他模型配置在运行时生成模型和映射。
使用 EF 设计器:开发人员绘制框和线条以使用 EF 设计器指定模型。 生成的模型以 XML 的形式存储在扩展名为 EDMX 的文件中。 应用程序域对象通常从概念模型自动生成。
EF 工作流
这两种方法都可用于定位现有数据库或创建新数据库,从而产生 4 个不同的工作流。 了解哪一个最适合你:
| 我只想编写代码... | 我想使用设计器... | |
|---|---|---|
| 我正在创建新数据库 | 使用 Code First 在代码 中定义模型,然后生成数据库。 | 使用 Model First 使用框和线条定义模型,然后生成数据库。 |
| 我需要访问现有数据库 | 使用 Code First 创建映射到现有数据库的基于代码的模型。 | 使用 Database First 创建映射到现有数据库的框和线条模型。 |
观看视频:我应使用什么 EF 工作流?
此简短视频介绍了这些差异,以及如何找到适合你的视频。
作者: 罗文·米勒
如果在观看视频后,你仍然没有把握地决定是否要使用 EF 设计器和 Code First,那就都学习吧!
探究内部机制
无论使用 Code First 还是 EF 设计器,EF 模型始终具有多个组件:
应用程序的域对象或实体类型本身。 这通常称为对象层
概念模型,由特定于域的实体类型和关系组成,使用 实体数据模型描述。 这一层通常用字母“C”来表示“概念”。
表示数据库中定义的表、列和关系的存储模型。 对于 存储,此层通常与后面的“S”一起引用。
概念模型与数据库架构之间的映射。 此映射通常称为“C-S”映射。
EF 的映射引擎利用“C-S”映射将针对实体(例如创建、读取、更新和删除)的操作转换为针对数据库中表的等效操作。
概念模型和应用程序对象之间的映射通常称为“O-C”映射。 与“C-S”映射相比,“O-C”映射是隐式的,一对一:概念模型中定义的实体、属性和关系需要与 .NET 对象的形状和类型匹配。 在 EF4 及更高版本中,对象层可以由具有属性的简单对象组成,且不依赖于 EF。 它们通常称为普通 CLR 对象(POCO),并通过名称匹配约定进行类型和属性的映射。 以前,在 EF 3.5 中,对象层存在特定的限制,例如必须派生自 EntityObject 类的实体,并且必须携带 EF 属性来实现“O-C”映射。