EF深度探索:从LINQ到数据库迁移

需积分: 10 3 下载量 22 浏览量 更新于2024-09-07 收藏 538KB PDF 举报
"EF学习笔记,涉及EF的使用、LINQ查询、数据库迁移及EF的特点与核心概念" 在Entity Framework (EF)中,LINQ to SQL 是一种强大的查询方式,它允许开发者使用C#或VB.NET的语法直接对数据库进行操作。在EF中,`Queryable`接口用于表示可以延迟执行的查询,它可以生成SQL语句并在需要时发送到数据库。`Queryable`所需要的参数是一棵表达式树,这棵树结构化地表示了查询的逻辑,EF会根据这个表达式树生成对应的SQL查询。 另一方面,当我们对`List`这样的集合进行操作时,LINQ to Objects 会生成一个`Enumerable`,`Enumerable`接受一个`Func`委托,这个委托定义了在内存中的数据如何被筛选、转换等。这种方式无需与数据库交互,所有的操作都在内存中完成。 数据库迁移是EF CodeFirst的一个重要特性,通过NuGet包管理器可以方便地进行数据库版本控制。首先,运行`Enable-Migrations`命令来启用迁移,这里可以添加`--context-class`参数指定上下文类,同时`seed`方法可用于初始化数据。接着,`Add-Migration`命令创建一个新的迁移,如`Add-Migration InitCreate`表示初始化创建的迁移。最后,`Update-Database`命令将应用所有未部署的迁移,更新数据库到最新状态。 EF有以下几个显著特点: 1. **模型建模**:EF允许开发者使用强类型的实体类来定义数据库模型,自定义实体类与数据库表的映射关系。 2. **分层结构**:实体数据模型由概念层、存储层和映射层组成,三层之间相互独立,降低了耦合度。 3. **术语解释**:实体类型代表数据库中的表,导航属性表示实体间的关联,标量属性是实体的属性,关联定义了实体之间的关系,实体键是标识实体的唯一标识,上下文对象则是整个模型的容器。 4. **代码生成**:利用T4模板,EF能够自动生成与数据库交互所需的代码。CodeFirst、CodeFirstMigrations都是基于代码的开发模式,开发者可以直接修改类库来改变数据库结构。 5. **数据库无关性**:无论是Database-First、Model-First还是Code-First,最终都会构建一个模型,该模型与具体的数据库系统解耦,提供了良好的数据库移植性。 在EF中,CSDL、MSL 和 SSDL 是三种重要的元数据语言: - **CSDL**(概念架构定义语言)描述了概念模型,包括实体、关系和函数,它是开发者在代码中定义的模型。 - **MSL**(映射规范语言)定义了概念模型与存储模型之间的映射关系,确保数据能在两者间正确转换。 - **SSDL**(存储架构定义语言)描述了数据库的存储模型,用于生成实际的SQL命令。 POCO(Plain Old CLR Object)是EF中常用的一种设计模式,它是指不包含任何特殊持久化逻辑或业务逻辑的简单类,只包含getter和setter,使得实体类更易于维护和测试。 在建模过程中,数据库上下文(DbContext)是核心组件,它封装了与数据库的交互,包括对对象图的管理,以及数据库连接和事务处理。通过继承`DbContext`类,我们可以定义自己的上下文类,包含对实体的 DbSet 属性,从而实现对数据库的操作。