### Entity Framework 学习知识点概览
#### 一、Entity Framework 概述
- **Entity Framework** 是微软推出的一种**对象关系映射器**(Object-Relational Mapper, ORM),允许开发者使用面向对象的方式进行数据库操作,而无需直接编写SQL语句。通过这种方式,可以大大减少与数据库交互的代码量,并提高应用程序的可维护性和可扩展性。
#### 二、EF基本概况
- 在.NET Framework SP1中引入的**实体框架**,旨在帮助开发人员通过面向概念模型编程来创建数据访问应用程序,而非直接面向底层的关系型存储架构。其主要目的是减少代码量并简化维护工作。
- **概念架构定义语言文件(.csdl)**:定义了概念模型,即应用程序中实体和关系的表示。
- **存储架构定义语言文件(.ssdl)**:定义了存储模型,即数据如何在底层数据库中存储。
- **映射规范语言文件(.msl)**:定义了存储模型与概念模型之间的映射关系。
- 实体框架使用这些基于XML的模型文件将对概念模型的操作转换为数据源中的操作。
- **语言集成查询(LINQ)** 支持为查询提供针对概念模型的编译时语法验证。
#### 三、ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager 类介绍
- **ObjectContext**: 代表与特定数据源的连接,提供了加载、跟踪和提交对数据库的更改的能力。
- **ObjectQuery**: 表示执行的查询,通常通过 LINQ to Entities 或 Entity SQL 创建。
- **ObjectStateEntry**: 用于表示实体对象的状态,如新增、修改或删除。
- **ObjectStateManager**: 负责管理实体对象的状态,处理对象的跟踪、状态变更等。
#### 四、LINQ TO Entities
- **LINQ to Entities** 是一种使用 LINQ 查询语法访问实体数据模型的方式。它允许开发人员以面向对象的方式编写查询表达式,从而更自然地与.NET编程环境集成。
- 例如,使用 LINQ to Entities 可以轻松地过滤、排序和分组数据集。
#### 五、EntitySQL
- **EntitySQL** 是一种与存储无关的 SQL 方言,可以直接操作概念模型中的实体。它支持诸如继承和关系等 EDM 功能,使得查询更为灵活。
- 通过 EntitySQL,开发人员可以构建复杂的查询,同时保持与具体数据库的独立性。
#### 六、ObjectQuery 查询及方法
- **ObjectQuery** 类提供了查询实体数据模型的功能。它支持多种查询方法,包括但不限于筛选、排序和分页等。
- 例如,`Where`, `OrderBy`, `Skip` 和 `Take` 等方法可用于构建更复杂的查询。
#### 七、EntityClient
- **EntityClient** 是一种用于与实体数据模型进行交互的客户端工具包。它提供了对实体框架功能的访问,包括查询、更新和事务管理等。
- EntityClient 主要用于需要跨平台或多数据库支持的场景。
#### 八、基本操作:增加、更新、删除、事务
- 实体框架支持常见的 CRUD 操作(Create, Read, Update, Delete),并通过事务管理确保数据完整性。
- 使用 EF 的 `ObjectContext` 类可以方便地执行这些操作,如使用 `AddObject`, `Attach`, `DeleteObject` 方法。
#### 九、支持复杂类型的实现
- EF 支持复杂类型,允许在实体中嵌套其他实体或非标量类型。
- 复杂类型可以用来表示如地址、联系方式等复合数据结构。
#### 十、存储过程支持
- **存储过程** 是预编译并存储在数据库中的 SQL 代码块。EF 支持调用存储过程,并可以将其映射到实体框架中。
- 存储过程可以提高性能并增强安全性。
#### 十一、使 EF 支持 Oracle9i
- 尽管 EF 主要设计用于 Microsoft SQL Server,但它也支持其他数据库系统,如 Oracle。
- 通过安装相应的 Oracle 数据提供程序,可以实现在 EF 中使用 Oracle 数据库。
#### 十二、改善 EF 代码的方法
- 随着项目的复杂度增加,优化 EF 代码变得尤为重要。
- 优化策略包括但不限于:懒加载、批量加载、使用视图模型代替实体等。
#### 总结
- Entity Framework 作为一种强大的 ORM 工具,极大地简化了数据访问层的开发工作,减少了与数据库交互的代码量,提高了应用程序的可维护性和可扩展性。
- 然而,它也有一些限制和挑战,如性能问题、复杂查询的实现难度等。因此,在选择是否使用 EF 时,需要根据项目的具体需求和团队的技术背景综合考虑。