一、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. Delphi——Window 消息 - 转载▼

    Delphi是Borland公司的一种面向对象的可视化软件开发工具. Delphi集中了Visual C++和Visual Basic两者的优点:容易上手.功能强大,特别是在界面设计.数据库编程.网络 ...

  2. 用Jpush极光推送实现抓取特定某个用户Log到七牛云服务器

    场景 我们的app常常会出现某个特定用户的手机出现异常情况,(注意不是所有用户,特定机型特定用户)如果用友盟,那么多log你也抓不完 ,看不到log就无法解决问题. 那么问题来了,如何实现对特定某个用 ...

  3. UVAlive3211 Now or later(2-SAT)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33799 [思路] 2-SAT. 二分安全间隔x,先到为1后到为0, ...

  4. hdu4746:2013杭州网络赛I 莫比乌斯反演

    题意: 有5000组询问,每组询问求有多少i,j满足i∈[1,n],j∈[1,m]且gcd(i,j)的质因子数目<=p. n,m<=500000 思路: 首先预处理出每个数的质因子数目分别 ...

  5. DHTML【6】--CSS

    从今天开始,我们迎来了一个新的面孔---CSS,二者这也是一个漂亮的面孔,为什么说这是一个漂亮的面孔呢?因为CSS是做特效的,可以美化HTML页面,我们看到淘宝网.网易首页等网站都非常好看,那都是一些 ...

  6. 斐波那契数列 51nod

    1242 斐波那契数列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 斐波那契数列的定义如下:   F(0) = 0 F(1) = 1 F(n) ...

  7. js的深拷贝和浅拷贝

    一.数组的深浅拷贝 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致 ...

  8. android 中如何限制 EditText 最大输入字符数

    方法一: 在 xml 文件中设置文本编辑框属性作字符数限制 如:android:maxLength="10" 即限制最大输入字符个数为10 方法二: 在代码中使用InputFilt ...

  9. Remember the Word,LA3942(Trie树+DP)

    Trie树基础题,记录下代码. #include <cstdio> #include <cstring> #define MaxNode 4005*100 #define No ...

  10. java实现excel的导入导出(poi详解)[转]

    java实现excel的导入导出(poi详解) 博客分类: java技术 excel导出poijava  经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个 ...