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

最新文章

  1. 为现有图像处理程序添加读写exif的功能
  2. city-picker 选择省市县的一个控件,好用。
  3. .NET Core下使用gRpc公开服务(SSL/TLS)
  4. Mysql数据库的通用安装方法
  5. Linux基础知识集锦
  6. bootstrap 响应式布局
  7. 【python cookbook】【数据结构与算法】10.从序列中移除重复项且保持元素间顺序不变
  8. socket学习笔记——select与epoll函数的使用(linux)
  9. 使用DataGridView数据窗口控件,构建用户快速输入体验
  10. Builder
  11. 初见IOS的UI之:UI控件的属性frame bounds center 和transform
  12. Android Activity四种加载方式
  13. zepto源码学习-01-整体感知
  14. 使用 WPF 创建预加载控件
  15. System.InvalidOperationException: 找到多个与名为“Home”的控制器匹配的类型。
  16. Linux操作系统入门教程
  17. 蚂蚁金服安全实验室首次同时亮相BlackHat Asia 以及CanSecWest国际安全舞台
  18. 深度链接(DeepLinking)怎样免费实现
  19. java开发150个建议
  20. 关于box-shadow和drop-shadow的显著区别

热门文章

  1. jquery validate 自定义验证方法 日期验证
  2. C#编译时出现“不安全代码只会在使用 /unsafe 编译的情况下出现”错误的解决
  3. cppunit学习笔记
  4. js的简单模板解析
  5. Ajax之 beforeSend和complete longind制作
  6. chrome播放语音时,在chrome 控制台中报 DOMException: The play() request was interrupted by a call to pause(). 的问题.
  7. 【H5开发基础】移动端1像素边框问题的解决方案
  8. 解决Item控件抢占焦点
  9. 推荐一款不错的dialog小工具:artDialog
  10. 错误处理:java.lang.NoClassDefFoundError: org/apache/taglibs/standard/tag/rt/core/ForEachTag