https://www.cnblogs.com/ejiyuan/archive/2009/05/27/1490786.html

1、ObjectContext

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

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

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

  • 到数据库的连接,以EntityConnection对象的形式封装。
  • 描述该模型的元数据,以MetadataWorkspace对象的形式封装。
  • 用于管理缓存中持久保存的对象的ObjectStateManager对象。

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

  • Attach(string,object):将实体对象附加到指定的实体容器中
  • AddObject(string,object):将实体对象添加到制定的实体容器中
  • Detach(object):移除指定的实体对象
  • DeleteObject(object):删除指定的实体对象
  • GetObjectByKey(System.Data.EntityKey key):通过主键KEY从ObjectStateManager中检索对象(如果存在);否则从存储区中检索。
  • TryGetObjectByKey(System.Data.EntityKey,out object):尝试从指定实体主键返回该实体
Racer frnado = ctx.Races.Where("it.Lastname=Alne").First;
EntityKey key = frnado.EntityKey;
ctx.Races.Detach(frnado);
frnado.Starts++;
Racer frnado1 = ctx.GetObjectByKey(key) as Racer;
ctx.ApplyCurrentValues(frnado);
  • ApplyPropertyChanges(string,object):将以指派的实体对象属性的更改应用到容器中对应的原对象。
  • AcceptAllChanges():接受所有对该实体对象的更改
  • SaveChanges(bool):将所有更新持久保存到存储区中。参数是客户端事务支持所需的参数。参数为true则在更新后自动将更改应用到ObjectStateManager中的实体。如果为false,则在更新后还需要调用AcceptAllChanges()以便更新ObjectStateManager中的实体。
  • Refresh(System.Data.Objects.RefreshMode refreshMode, object entity):按指定持久更新模式,使用指定实体的存储区数据更新ObjectStateManager。
int changes = ;
try
{
changes += ctx.SaveChanges();
}
catch (OptimisticConcurrencyException ex)
{
ctx.Refresh(System.Data.Objects.RefreshMode.ClientWins, ex.StateEntries);
changes += ctx.SaveChanges();
}
Console.WriteLine("实体改变数量" + changes);

  • CreateQuery<T>(string,params ObjectParameter[]):从给定的查询字符串创建ObjectQuery对象。
  • ExecuteFunction<TElement>(string,params ObjectParameter[]):对默认容器执行给定的函数。
string esql = "SELECT VALUE DBItemList FROM myContext.DBItemList";
// ObjectQuery<DBItemList> query = new ObjectQuery<DBItemList>(esql, context);
ObjectQuery<DBItemList> query = ctx.CreateQuery<DBItemList>(esql);
foreach (DBItemList r in query)
{
Console.WriteLine(r.NameID);
}

2、ObjectQuery

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

3、ObjectStateEntry

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

  • AcceptChanges():接受当前值作为原始值,并将实体标记为Unchanged()。
  • Delete():将实体标记为Deleted()。如果实体处于Added()()()状态,它将为Detached()。
  • GetModifiedProperties():返回标记为Modified()的属性名称。
  • SetModified():将状态设置为Modified()。
  • SetModifiedProperty():将指定的属性标记为Modified()。

4、ObjectStateManager

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

  • GetObjectStateEntries:获取给定EntityState的ObjectStateEntry集合。
IEnumerable<ObjectStateEntry> oseList = ctx.ObjectStateManager.GetObjectStateEntries(EntityState.Added);
foreach (ObjectStateEntry ose in oseList)
{
Console.WriteLine("{0},{1},{2},{3}", ose.State, ose.CurrentValues["ID"], ose.EntitySet.Name, ose.Entity);
}
  • GetObjectStateEntry:获取给定的EntityKey对应的ObjectStateEntry
myContext ctx = new myContext();
myTab r = ctx.myTab.First(p => p.ID == );
r.a = "wxwinter";
ObjectStateEntry ose = context.ObjectStateManager.GetObjectStateEntry(r.EntityKey); Console.WriteLine(ose.State);
foreach (string pr in ose.GetModifiedProperties())
{
Console.WriteLine(pr);
Console.WriteLine("CurrentValues :{0}", ose.CurrentValues[pr]);
Console.WriteLine("OriginalValues:{0}", ose.OriginalValues[pr]);
}

Entity Framework二、 模型优先 ,ObjectContext类的更多相关文章

  1. Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  2. Asp.Net MVC 模型(使用Entity Framework创建模型类)

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  3. ADO.NET Entity Framework学习笔记(3)ObjectContext

    ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转]   说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...

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

    本节,简单的介绍EF中的ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager这个几个比较重要的类,它们都位于System.Data ...

  5. Asp.Net MVC 使用Entity Framework创建模型类

    先来说说LINQ to SQL和Entity Framework的区别: LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术.他们之间的本质区别在于EF ...

  6. Entity Framework 学习初级篇2--ObjectContext类的介绍

    转自:http://www.cnblogs.com/Tally/archive/2012/09/14/2685014.html 本节,简单的介绍EF中的ObjectContext.ObjectQuer ...

  7. Entity Framework 二

    本篇主要介绍:创建了实体数据模型,生成了那些文件以及其代表意义 创建实体数据模型 上一篇的最后,我们创建了数据库,现在我们利用数据库来生成我们的实体数据模型,这种形式我们称为数据库优先,后面会介绍代码 ...

  8. Entity Framework 教程——模型浏览器

    模型浏览器: 在之前的章节中,我们创建了第一个关于学校的实体数据模型.但是EDM设计器并没有将他所创建的所有对象完全显示出来.它只将数据库中的被选择的表与视图显示出来了. 模型浏览器可以将EDM所创建 ...

  9. Entity framework 更改模型,新增表

    在Package Manager Console 中运行命令Enable-Migrations 再次运行可以更新 抄袭 在实体类中增加一个属性以后,执行 Update-Database 命令 ,可以更 ...

随机推荐

  1. 洛谷 题解 P1908 【逆序对】

    一开始竟然妄想用\(n^2\)的算法过这题,然而这是不可能的 所以只好写归并排序来求逆序対惹 比如将下面两个区间排序 3 4 7 9 1 5 8 10 首先将右区间的\(1\)取出,放到\(r_k\) ...

  2. Max coverage disjoint intervals

    Assume you have k<=10^5 intervals [a_i, b_i] \in [1,10^18] (some of them may overlap), and you ne ...

  3. oracle多表关联查询和子查询

    oracle多表关联查询和子查询 一.多表关联查询 例子: SQL> create table student1 ( sid ), sname ), sage )); Table created ...

  4. windows和linux环境下使用google的glog日志库

    一.概述 glog是google推出的一款轻量级c++开源日志框架,源码在github上,目前最新release版本是v0.3.5. githut地址:https://github.com/googl ...

  5. Django多对多关系建立及Form组件

    目录 Django多对多关系 1.创建方式一全自动 2.创建方式二纯手撸 3.半自动(推荐使用) forms校验组件 使用forms组件实现注册功能 form常用字段和插件 数据校验 钩子函数 HOO ...

  6. JS OOP -02 深入认识JS中的函数

    深入认识JS中的函数: 1.概述,认识函数对象 2.函数对象和其他内部对象的关系 3.将函数作为参数传递 4.传递给函数的隐含参数:arguments 5.函数的apply,call方法和length ...

  7. JS OOP 概述

    JS面向对象,大致内容 1.面向对象的基础 2.深入认识JS的函数 3.JS类的实现 4JS中共有成员,私有成员和静态成员 5.JS的反射 6.JS的继承 7.JS实现抽象类 8.JS事件设计模式 9 ...

  8. ASP.NET Core 入门(1)(搭建环境CentOS)

    一.CentOS 7 安装 下载CentOS http://isoredirect.centos.org/centos/7/isos/x86_64/  选择其中下载即可. 下载完成后打开vmware准 ...

  9. 如何禁止Chrome浏览器隐藏URL的WWW前缀

    如何禁止Chrome浏览器隐藏URL的WWW前缀 一.打开Chrome浏览器 二.在Chrome浏览器的地址栏中输入以下内容并回车: chrome://flags/#omnibox-ui-hide-s ...

  10. java计算接口调用时间

    方法一: LocalDateTime beginTime = LocalDateTime.now(); Long opetime = Duration.between(between,LocalDat ...