EF中几个重要的类:ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager
ObjectContext封装 .NET Framework 和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。
ObjectContext 类为主类,用于与作为对象(这些对象为 EDM 中定义的实体类型的实例)的数据进行交互。
ObjectContext 类的实例封装以下内容:
- 到数据库的连接,以 EntityConnection 对象的形式封装。
- 描述该模型的元数据,以 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)
尝试从指定实体主键返回该实体
以上各个方法的具体用法,将在后面介绍。
接着,再看看有用的类ObjectQuery。
ObjectQuery有个有用的方法ToTraceString(),这个方法用于追踪所执行的SQL语句,通过此方法我们可以获取所执行的SQL语句,以便我们查看、分析具体执行的SQL语句。(类似Nhibernate配置文件中的showsql节)
再了解一下ObjectStateEntry。
ObjectStateEntry维护实体实例或关系实例的状态(已添加、已删除、已分离、已修改或未更改)、键值和原始值。还管理已修改属性的列表。其包含一下方法:
- AcceptChanges
接受当前值作为原始值,并将实体标记为 Unchanged()。
- Delete
将实体标记为 Deleted()。如果实体处于 Added()()() 状态,它将为 Detached()。
- GetModifiedProperties
返回标记为 Modified()的属性名称。
- SetModified
将状态设置为 Modified()。
- SetModifiedProperty
将指定的属性标记为 Modified()。
接着,再看看ObjectStateManager。
ObjectStateManager用于维护对象映射、对象状态/标识管理以及实体实例或关系实例的持久性。
获取给定EntityState的ObjectStateEntry集合。
获取给定的 EntityKey 对应的 ObjectStateEntry
EF中几个重要的类:ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager的更多相关文章
- .NET在EF中使用sql,用动态类吧!
.NET在EF中使用sql,用动态类吧! 前言 在.NET中使用Entity Framework能快速.方便地结合LINQ来对数据库进行一系列的增删改查操作.但是由于EF根据表达式最后生成通用的sql ...
- 5.翻译:EF基础系列---EF中的上下文类
原文地址:http://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx EF中的上下文类是一 ...
- EF中执行原生sql与使用Local获取本地数据
使用DbSet的Local属性可以访问当前context中被追踪且没有被标记为删除的实体(内存中的数据) using (var context = new BloggingContext()) { / ...
- 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...
- 2.EF中 Code-First 方式的数据库迁移
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...
- EF中的Code First
一些概念 POCO POCO(Plain Old CLR Object)的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样.所以POCO的解释就是“Plai ...
- DB表的关系及EF中Fluent API的使用
现在使用多数的数据库是关系型数据库,那么表与表之间的关系就会显得尤其重要,对于数据的CRUD处理和以后数据的分析有很大的好处.下面是对于数据库中对表关系的理解以及在EF中使用Fluent API来创建 ...
- Code First:如何实现一个主类中包含多个复类
假设我们在程序中要用到的类的结构是这样的,这里比较特别的是B在A中出现了最少两次 public class B { [Key] public int Id { get; set; } public s ...
- 在Code First中使用Migrations对实体类和数据库做出变更
在Code First中使用Migrations对实体类和数据库做出变更,Mirgration包含一系列命令. 工具--库程序包管理器--程序包管理器控制台 运行命令:Enable-Migration ...
随机推荐
- CSDN日报20170413 ——《天天写业务代码的那些年,我们是怎样成长过来的》
[程序人生]天天写业务代码的那些年,我们是怎样成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboo ...
- Java源码阅读HashMap
1类签名与注释 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cl ...
- Asp.net问题集锦
1.在Web应用开发中经常碰到这样的情况,Dropdownlist绑定的数据太多,用户要选择某一项必须从头找到尾,使用起来很不方便.最近我在工作中就碰到这种情况,公司内某个业务系统需要绑定几百条的厂家 ...
- uva507 - Jill Rides Again(最长连续和)
option=com_onlinejudge&Itemid=8&page=show_problem&problem=448">题目:uva507 - Jill ...
- cordova与ios native code交互的原理
非常早曾经写了一篇博客,总结cordova插件怎么调用到原生代码:cordova调用过程,只是写得太水.基本没有提到原理.近期加深了一点理解,又一次补充说明一下 js调用native 以下是我们产品中 ...
- 自己如何正确获取MYSQL的ADO连接字符串
1.下载安装MYSQL的ODBC数据库驱动程序(mysql-connector-odbc-5.3.4-win32.msi或者mysql-connector-odbc-5.3.4-winx64.msi) ...
- 【VBA】获取当前工作表的用户名
如何使用VBA获取当前工作表的用户名呢?请看如下代码: Sub 获取当前工作表的用户名() MsgBox "当前工作表的用户名为:" & Application.UserN ...
- 【Cocosd2d-x CCMenu菜单之二】
菜单项CCMenuItem是一个基类. 子类CCMenuItemFont.CCMenuItemLabel.CCMenuItemSprite.CCMenuItemToggle可增加CCMenu中形成菜单 ...
- sqlserver 中EXEC和sp_executesql使用介绍
sqlserver 中EXEC和sp_executesql使用介绍 MSSQL为我们提供了两种动态运行SQL语句的命令,各自是EXEC和sp_executesql;通常,sp_executesql则更 ...
- Java 分页之最简单的算法
分页实现有很多方式,如jQuery自带框架pagination或在java封装一个类pager等. 下写一个简单易懂的分页算法 逻辑: // 步骤1:设置每页页数大小 long pageS ...