一、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。

EF学习的更多相关文章

  1. 个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 2

    接上篇:个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 1 Step1 在主程序中设置连接数据库 从Model类库的 App.Config 把数据库字符串拷贝出来, ...

  2. EF学习笔记(十二):EF高级应用场景

    学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十一):实施继承 本篇原文链接:Advanced Entity Framework Scenari ...

  3. EF学习笔记(十一):实施继承

    学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十) 处理并发 本篇原文链接:Implementing Inheritance 面向对象的世界里, ...

  4. EF学习笔记(十) 处理并发

    总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(九):异步处理和存储过程 本篇原文链接:Handling Concurrency Concurrency ...

  5. EF学习笔记(九):异步处理和存储过程

    总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(八):更新关联数据 本篇原文:Async and Stored Procedures 为何要采用异步? ...

  6. EF学习笔记(八):更新关联数据

    学习笔记主目录链接:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇链接:EF学习笔记(七):读取关联数据 本篇原文链接:Updating Related Data 本篇主要考 ...

  7. EF学习和使用综合

    一.(引)你必须知道的EF知识和经验 二.(引)EF学习和使用(七)EF性能优化篇 三.(引)采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延 ...

  8. EF学习笔记(七):读取关联数据

    总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇参考原文链接:Reading Related Data 本章主要讲述加载显示关联数据: 数据加载分为以下三种 Lazy l ...

  9. ef学习一

    学习内容:https://www.cnblogs.com/5ishare/p/5801229.html 注意点: 1.NuGet程序包引入ef,使用DbSet<>必须引入ef.本例EFCo ...

  10. ado.net EF学习系列----深入理解查询延迟加载技术(转载)

    ado.net EF是微软的一个ORM框架,使用过EF的同学都知道EF有一个延迟加载的技术. 如果你是一个老鸟,你可能了解一些,如果下面的学习过程中哪些方面讲解的不对,欢迎批评指教.如果一个菜鸟,那我 ...

随机推荐

  1. 【转】(DT系列六)devicetree中数据和 struct device有什么关系

    原文网址:http://www.cnblogs.com/biglucky/p/4057499.html devicetree中数据和structdevice有什么关系 总体来说,devicetree与 ...

  2. TF31003错误的解决办法

    TF31003错误的解决办法   在今天上午机器重新启动后,VS2012突然无法连接TFS2010了.在机器重新启动之前还使用正常.刚开始以为TFS出现了问题,不过其他小组同事使用却正常,问题应该在我 ...

  3. Java学习日记-2.1 运算符

    1. 赋值运算符 赋值运算符是有值的 int i; System.out.println(i = 5); //输出5 正因为赋值运算符有值,所以可以可以连等地赋值 int j,k,l,m,n; j = ...

  4. 《SDN核心技术剖析和实战指南》2.3 OF-CONFIG配置管理协议小结

    OpenFlow协议定义了交换机和控制器交换数据的方式和规范,但并没有定义如何配置和管理必需的网络参数和网络资源,OF-CONFIG的提出就是为了对OpenFlow提供配置管理支持.如下图所示,OF- ...

  5. K - Treasure Exploration - POJ 2594(最小路径覆盖+闭包传递)

    题意:给一个有向无环图,求出来最小路径覆盖,注意一个点可能会被多条路径重复 分析:因为有可能多条路径走一个点,可又能会造成匹配的不完全,所以先进行一次闭包传递(floyd),然后再用二分匹配的方法求出 ...

  6. 001_python变量命名规范(待实践一遍)

    参考: http://blog.sina.com.cn/s/blog_62f28d560100xv85.html https://my.oschina.net/leejun2005/blog/3871 ...

  7. requirejs2读书笔记

    If you want to do require() calls in the HTML page, then it is best to not use data-main. data-main ...

  8. 桌面环境与桌面搜索Desktop Search tools

    最近一段时间工作重心都将放在Linux下Desktop search(桌面搜索)框架的研发上.因此对desktop search进行了初步的调研.本文将从下面三个方面展开: Linux桌面环境(Des ...

  9. [Angular 2] Using Two Reducers Together

    Add another reducer: export const SECOND = "SECOND"; export const HOUR = "HOUR"; ...

  10. [AngularJS] ngMessageFormat

    ngMessageFormat can be installed via npm using the following command: $ npm install angular-message- ...