【Entity Framework】初级篇--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍

本节,简单的介绍EF中的ObjectContext、ObjectQuery、ObjectStateEntryObjectStateManager这个几个比较重要的类,它们都位于System.Data.Entity.dll下的System.Data.Objects命名空间下。在后续的章节中,我们经常会用到它们的某些方法,以便完成我们的某些操作或目的。本节,简单的说明一下以后我们可能会用到的各个类的方法,以方便我们后续的学习。

ObjectContext封装 .NET Framework 和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。

ObjectContext 类为主类,用于与作为对象(这些对象为 EDM 中定义的实体类型的实例)的数据进行交互。

ObjectContext 类的实例封装以下内容:

l           到数据库的连接,以 EntityConnection 对象的形式封装。

l           描述该模型的元数据,以 MetadataWorkspace 对象的形式封装。

l           用于管理缓存中持久保存的对象的 ObjectStateManager 对象。

ObjectContext类的成员方法以说明如下所示:

l           AcceptAllChanges()

接受所有对该实体对象的更改

l           AddObject(string,object)

将实体对象添加到制定的实体容器中

l           ApplyPropertyChanges(string,object)

将以指派的实体对象属性的更改应用到容器中对应的原对象。

l           Attach(System.Data.Objects.DataClasses.IEntityWithKey entity)

将带主键的实体对象附加到默认的容器中

l           Attach(string,object)

将实体对象附加到指定的实体容器中

l           CreateEntityKey(string,object)

给指定的实体对象创建实体主键或如果已存在实体主键,则直接返回该实体的主键

l           CreateQuery<T>(string,params ObjectParameter[])

从给定的查询字符串创建ObjectQuery对象。

l           DeleteObject(object)

删除指定的实体对象

l           Detach(object)

移除指定的实体对象

l           ExecuteFunction<TElement>(string,params ObjectParameter[])

对默认容器执行给定的函数。

l           GetObjectByKey(System.Data.EntityKey key)

通过主键KEY从 ObjectStateManager 中检索对象(如果存在);否则从存储区中检索。

l           Refresh(System.Data.Objects.RefreshMode refreshMode, object entity)

按指定持久更新模式,使用指定实体的存储区数据更新ObjectStateManager。。

l           Refresh(System.Data.Objects.RefreshMode refreshMode, System.Collections.IEnumerable collection)

按指定持久处理模式,使用指定实体集的存储区数据更新ObjectStateManager

l           SaveChanges(bool)

将所有更新持久保存到存储区中。参数是客户端事务支持所需的参数。参数为true则在更新后自动将更改应用到ObjectStateManager中的实体。如果为false,则在更新后还需要调用AcceptAllChanges()以便更新ObjectStateManager中的实体。

l           SaveChanges()

将所有更新持久保存到存储区中

l           TryGetObjectByKey(System.Data.EntityKey,out object)

尝试从指定实体主键返回该实体

以上各个方法的具体用法,将在后面介绍。

接着,再看看有用的类ObjectQuery。

ObjectQuery有个有用的方法ToTraceString(),这个方法用于追踪所执行的SQL语句,通过此方法我们可以获取所执行的SQL语句,以便我们查看、分析具体执行的SQL语句。(类似Nhibernate配置文件中的showsql节)

再了解一下ObjectStateEntry

ObjectStateEntry维护实体实例或关系实例的状态(已添加、已删除、已分离、已修改或未更改)、键值和原始值。还管理已修改属性的列表。其包含一下方法:

l           AcceptChanges

接受当前值作为原始值,并将实体标记为 Unchanged()。

l            Delete

将实体标记为 Deleted()。如果实体处于 Added()()() 状态,它将为 Detached()。

l           GetModifiedProperties

返回标记为 Modified()的属性名称。

l            SetModified

将状态设置为 Modified()。

l            SetModifiedProperty

将指定的属性标记为 Modified()。

接着,再看看ObjectStateManager

ObjectStateManager用于维护对象映射、对象状态/标识管理以及实体实例或关系实例的持久性。

l           GetObjectStateEntries

获取给定EntityState的ObjectStateEntry集合。

l           GetObjectStateEntry

获取给定的 EntityKey 对应的 ObjectStateEntry

现在,几个重要的类简单介绍完毕。后面,我们将具体学习它们的使用。

时间: 2024-11-08 18:23:13

【Entity Framework】初级篇--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍的相关文章

entity framework 6 自己编写的通用数据类

//dal类: public class BaseDAL { string strConn = ""; public BaseDAL(string connString) { strConn = connString; } #region 通用增删改查 #region 非原始sql语句方式 /// <summary> /// 新增 /// </summary> /// <param name="entity">实体</par

实体框架- Entity Framework 基础篇

以前写数据层D层的时候里面有好多的SQL语句,如何省略到繁琐的SQL语句,微软提供了一种很好的方式-实体框架-Entity Framwork.一种对象映射机制,支持.NET开发人员使用域特定对象来出来关系数据,消除了对开发人员通常需要编写的大部分数据访问代码的需求. ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.实体框架Entity Framework是ADO.NET中的一组支持开发面向数据的软件

Entity Framework 出现 &quot;此 ObjectContext 实例已释放,不可再用于需要连接的操作&quot; 的错误

原因 Entity的导航属性在View中使用,但是该Entity所在的Context已经在Controller中通过 using 释放掉:但是Entity又具有Deferred Query Evaluation性质,因此,导航属性对象没有被加载,从而出现上述错误. 解决方案 解决方法一:How to: Explicitly Load Related Objects 禁用Context的Deferred Query Evaluation,然后在查询结束后手动加载所有需要的导航属性 context.

Entity Framework 第一篇

这段时间研究了orm框架EF 写一写研究的历程和心得 先贴上核心代码 public interface ITransaction { bool IsTransaction { get;} void BeginTransaction(); int Commit(); void Rollback(); } public class BaseRepository : ITransaction, IDisposable { private XFDbContext dbContext; /// <summ

Entity Framework学习初级篇

1--EF基本概况 最近在学习研究微软的EF,通过这时间的学习研究,感觉这个EF目前来说还不是很完善,半成品.不过,据说在.Net4.0中,微软将推荐使用此框架,并会有所改善.而且,现在基本上所有数据库均提供了对EF的支持.因此,为以后做技术准备可以学习研究以下.但是,我个人觉得就目前来说,在实际项目慎用此框架. 下面简单的介绍以下这个EF. 在.Net Framework SP1微软包含一个实体框架(Entity Framework),此框架可以理解成微软的一个ORM产品.用于支持开发人员通过

Entity Framework 学习

Entity Framework 学习初级篇1--EF基本概况... 2 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager类的介绍... 7 Entity Framework 学习初级篇3-- LINQ TOEntities. 10 Entity Framework 学习初级篇4--EntitySQL. 17 Entity Framework 学习初级篇5--ObjectQ

Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用

ORM作为一种数据库访问机制已广泛地应用于各种项目当中,在.Net开发中,应用比较广泛的ORM框架大致有下面几个: 官方支持的有:Linq to SQL,Entity Framework.三方的有:NHibernate.前面介绍过Linq to SQL的应用,这篇介绍一下Entity Framework在Asp.Net MVC4中的应用. 首先用Visual Studio(2012或2013,其它版本需要安装Asp.Net MVC4)创建一个Asp.Net MVC4的项目,项目创建完成后会发现E

Entity Framework的启动速度优化

刚开始的时候没有太在意,但是随着系统的发布,这种初次请求,或者闲置若干时间后第一次请求的漫长等待使得App的体验很差,很多时候App加载好半天数据都没过来.如果前端没处理好,还会导致App的假死.所以就花了点功夫研究下什么原因导致. 刚开始的时候,还以为是WebService的框架出了问题.后面使用App,通过Fiddler看到了,某次请求db.竟然长达6s中,并且每次导致请求超时都出现在db.访问这一块,这显然不正常.早期,我们访问数据库使用的是原始的ADO.NET 执行SQL语句,如果有参数

LINQ之路10:LINQ to SQL 和 Entity Framework(下)

在本篇中,我们将接着上一篇“LINQ to SQL 和 Entity Framework(上)”的内容,继续使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术的关键特性.我们在此关注的是LINQ to SQL和Entity Framework中的”LINQ”部分,并会比较这两种技术的相同和不同之处.通过我们之前介绍的LINQ知识还有将来会讨论的更多LINQ Operators,相信阅者能针对LINQ to SQL和Entity Framework写出优雅