一、EF介绍
实体框架 Entity Framework 是ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。在 EF 中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。
概念架构定义语言文件 (.csdl) -- 定义概念模型。
存储架构定义语言文件 (.ssdl) -- 定义存储模型(又称逻辑模型)。
映射规范语言文件 (.msl) -- 定义存储模型与概念模型之间的映射。
实体框架 使用这些基于 XML 的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM甚至支持将概念模型中的实体映射到数据源中的存储过程。它提供以下方式用于查询 EDM 并返回对象:
LINQ to Entities --提供语言集成查询 (LINQ) 支持用于查询在概念模型中定义的实体类型。
Entity SQL -- 与存储无关的 SQL 方言,直接使用概念模型中的实体并支持诸如继承和关系等 EDM 功能。
查询生成器方法 --可以使用 LINQ 风格的查询方法构造 Entity SQL 查询。
二、EF的基本使用方法
1.首先,建立一个名为“EFtest1”的解决方案,然后添加一个名为“EFModel”的类库项目。
2.接着,在 EFModel 项目中,添加“ADO.NET Entity Data Model”项目,如下图所示:
3.在后面的步骤中,选择数据库后,在选择数据库对象,把表、试图、存储过程全部都选上,如下图所示。:
4.完成后如下图
三、ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍
这个几个比较重要的类,它们都位于 System.Data.Entity.dll下的 System.Data.Objects 命名空间下。
1.ObjectContext 封装 .NET Framework 和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。
ObjectContext 类为主类,用于与作为对象(这些对象为 EDM 中定义的实体类型的实例)的数据进行交互。
ObjectContext 类的实例封装以下内容:
到数据库的连接,以 EntityConnection 对象的形式封装。
描述该模型的元数据,以 MetadataWorkspace 对象的形式封装。
用于管理缓存中持久保存的对象的 ObjectStateManager 对象。
描述该模型的元数据,以 MetadataWorkspace 对象的形式封装。
用于管理缓存中持久保存的对象的 ObjectStateManager 对象。
ObjectContext 类的成员方法以说明如下所示:
AcceptAllChanges() | 接受所有对该实体对象的更改 |
AddObject(string,object) | 将实体对象添加到制定的实体容器中 |
ApplyPropertyChanges(string,object) | 将以指派的实体对象属性的更改应用到容器中对应的原对象。 |
Attach(System.Data.Objects.DataClasses.IEntityWithKey entity) | 将带主键的实体对象附加到默认的容器中 |
Attach(string,object) | 将实体对象附加到指定的实体容器中 |
CreateEntityKey(string,object) | 给指定的实体对象创建实体主键或如果已存在实体主键,则直接返回该实体的主键 |
CreateQuery<T>(string,params ObjectParameter[]) | 从给定的查询字符串创建 ObjectQuery 对象。 |
DeleteObject(object) | 删除指定的实体对象 |
Detach(object) | 移除指定的实体对象 |
ExecuteFunction<TElement>(string,params ObjectParameter[]) | 对默认容器执行给定的函数。 |
GetObjectByKey(System.Data.EntityKey key) | 通过主键 KEY 从 ObjectStateManager 中检索对象(如果存在);否则从存储区中检索。 |
Refresh(System.Data.Objects.RefreshMode refreshMode, object entity) | 按指定持久更新模式,使用指定实体的存储区数据更新 ObjectStateManager。。 |
Refresh(System.Data.Objects.RefreshMode refreshMode, System.Collections.IEnumerable collection) | 按指定持久处理模式,使用指定实体集的存储区数据更新 ObjectStateManager。 |
SaveChanges(bool) | 将所有更新持久保存到存储区中。参数是客户端事务支持所需的参数。参数为 true则在更新后自动将更改应用到 ObjectStateManager 中的实体。如果为false,则在更新后还需要调用 AcceptAllChanges()以便更新ObjectStateManager 中的实体。 |
SaveChanges() | 将所有更新持久保存到存储区中 |
TryGetObjectByKey(System.Data.EntityKey,out object) | 尝试从指定实体主键返回该实体 |
2.类 ObjectQuery
ObjectQuery 有个有用的方法ToTraceString(),这个方法用于追踪所执行的 SQL 语句,通过此方法我们可以获取所执行的 SQL 语句,以便我们查看、分析具体执行的 SQL 语句。
3.ObjectStateEntry
ObjectStateEntry 维护实体实例或关系实例的状态(已添加、已删除、已分离、已修改或未更改)、键值和原始值。还管理已修改属性的列表。其包含以下方法:
AcceptChanges | 接受当前值作为原始值,并将实体标记为 Unchanged()。 |
Delete | 将实体标记为 Deleted()。如果实体处于 Added()()() 状态,它将为 Detached()。 |
GetModifiedProperties | 返回标记为 Modified()的属性名称。 |
SetModified | 将状态设置为 Modified()。 |
SetModifiedProperty | 将指定的属性标记为 Modified() |
4.ObjectStateManager。
ObjectStateManager 用于维护对象映射、对象状态/标识管理以及实体实例或关系实例的持久性。
GetObjectStateEntries:获取给定 EntityState 的 ObjectStateEntry 集合。
GetObjectStateEntry:获取给定的 EntityKey 对应的ObjectStateEntry。