一、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. html幻灯效果页面

    方式一: <!DOCTYPE HTML> <html> <head> <style> #cont { position: relative; heigh ...

  2. tungsten

    ./tools/tungsten-installer --master-slave -a --datasource-type=mysql --master-host=master.puppet.org ...

  3. 执行测试遇到log4j 没有找到日志appenders

    log4j:WARN No appenders could be found for logger (com.sshtools.j2ssh.transport.publickey.SshKeyPair ...

  4. SuppressWarnings的警告

    简介:java.lang.SuppressWarnings是J2SE 5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量上.作用:告诉编译器忽略指定的警告, ...

  5. js:jquery multiSelect 多选下拉框实例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. VS2008 ctrl+shift+F热键冲突

    今天发现有时VS 热键好使,有时,怎么按都没有反应. 后来发现是和输入法有冲突,把输入法快捷键改了就好了.

  7. Android 自定义View (四) 视频音量调控

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24529807 今天没事逛eoe,看见有人求助要做一个下面的效果,我看下面一哥们说 ...

  8. STL之deque双向队列

    deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,提供随机访问,deque在接口上和vector非常相似,下面列出deque的常用成员函数: Table 6.9. C ...

  9. java byte数组与int,long,short,byte转换

    public class DataTypeChangeHelper { /** * 将一个单字节的byte转换成32位的int * * @param b * byte * @return conver ...

  10. 第三章:真正弄清楚一个Mod的组织结构

    <基于1.8 Forge的Minecraft mod制作经验分享> 首先看看一个mod的文件结构,懂Java的应该都看得懂: src/main/ --java/com.xxxxxxxx.x ...