数据建模的一种由来已久且常见的设计模式是将数据模型分为三个部分:概念模型、逻辑模型和物理模型。概念模型定义要建模的系统中的实体和关系。关系数据库的逻辑模型通过外键约束将实体和关系规范化到表中。物理模型通过指定分区和索引等存储详细信息实现特定数据引擎的功能。
概念模型、存储模型以及两个模型之间的映射以外部规范(称为 实体数据模型 (EDM))表示。可以根据需要对存储模型和映射进行更改,而不需要对概念模型、数据类或应用程序代码进行更改。存储模型是特定于提供程序的,因此可以在各种数据源之间使用一致的概念模型。
EDM 由以下三种模型和具有相应文件扩展名的映射文件进行定义。
-
概念架构定义语言文件 (.csdl) -- 定义概念模型。
-
存储架构定义语言文件 (.ssdl) -- 定义存储模型(又称逻辑模型)。
-
映射规范语言文件 (.msl) -- 定义存储模型与概念模型之间的映射。
实体框架 使用这些基于 XML 的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM 甚至支持将概念模型中的实体映射到数据源中的存储过程。
实体框架 提供以下方式用于查询 EDM 并返回对象:
-
LINQ to Entities -- 提供语言集成查询 (LINQ) 支持用于查询在概念模型中定义的实体类型。
-
Entity SQL -- 与存储无关的 SQL 方言,直接使用概念模型中的实体并支持诸如继承和关系等 EDM 功能。Entity SQL 可用于对象查询和使用 EntityClient 提供程序执行的查询。
-
查询生成器方法 -- 使您可以使用 LINQ 风格的查询方法构造 Entity SQL 查询。
实体框架 中包含 EntityClient 数据提供程序。此提供程序管理连接,将实体查询转换为特定于数据源的查询,并返回一个由对象服务用来将实体数据具体化为对象的数据读取器。当不需要对象具体化时,通过使应用程序执行 Entity SQL 查询并使用返回的只读数据读取器,还可以像标准 ADO.NET 数据提供程序一样使用 EntityClient 提供程序。
下图演示用于访问数据的实体框架体系结构:
实体框架 生成一个从ObjectContext派生的类,该类表示概念模型中的实体容器。此对象上下文提供跟踪更改以及管理标识、并发和关系的功能。此类还公开将插入、更新和删除操作写入数据源的 SaveChanges 方法。与查询类似,这些更改是由系统自动生成的命令或由开发人员指定的存储过程执行的。
实体数据模型工具
除了 实体框架 运行库以外,.NET Framework 3.5 SP1 还包含 EDM 生成器。该命令提示实用工具连接到数据源并基于实体与表之间的一对一映射生成 EDM。另外,该实用工具还使用概念模型文件 (.csdl) 生成一个对象层文件,该文件包含表示实体类型和 ObjectContext 的类。