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. php 的 socket简单原理及实现

    什么是socket socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,连接的一端称为一个socket. 因此socket运行是置少有2个端组成,一个为服务端一个为客户端(客户端可以多 ...

  2. uboot-的start.S详细注解及分析

    原文地址:uboot-的start.S详细注解及分析 作者:zhouyg11 大多数bootloader都分为stage1和stage2两部分,u-boot也不例外.依赖于CPU体系结构的代码(如设备 ...

  3. prometheus+grafana监控nginx

    被监控机器环境搭建&配置 nginx-module-vts下载: https://github.com/vozlt/nginx-module-vts nginx-module-vts安装 un ...

  4. LOJ2557 CTSC2018组合数问题(提交答案)

    直接利用simulator退火应该可以得到大量分数. op=1:1,4,5,6,10 即构造序列{ai},最小化Σti,ai+rai,aj. 1:暴搜/退火. 4:观察到图大致成一条链(注意其中有两个 ...

  5. 总结一下C++与C#之间的区别

    1,C#不支持多重继承 2.在标准的C#安全代码中不支持指针类型的操作,然而,你却能在微软所谓的“非安全代码”中操作指针类型对象. 3.C#中所有对象都只能通过关键词“new”来创建,C++的“类名_ ...

  6. 奇妙的算法【7】-贪婪算法-dp

    问题1描述:[贪婪算法,Dijistra算法] ①有一只兔子要从一个N*N的二维矩阵方格中从上跳到下面: ②每次只能向左或向下,越过一个方格,跳到下一个方格中: ③被越过的方格中的数值,表示该兔子越过 ...

  7. T4模板使用笔记

    路径获取 ① 获取当前解决方案路径 string solutionsPath = Host.ResolveAssemblyReference("$(SolutionDir)"); ...

  8. 笔记: ASP.NET Core视图组件

    视图组件 asp.net core mvc 提供了部分视图的新替代品:视图组件. 视图组件与分布视图的主要区别在于视图组件与控制器不相关.可使用在独立于单个控制器的场景,如:菜单导航.侧边栏.分页栏等 ...

  9. 利用Supervisor 管理自己部署的应用程序

    首先,在centos7下安装supervisor yum install python-setuptools easy_install supervisor 然后新建配置文件 #新建superviso ...

  10. 英特尔vPro博锐技术激活

    英特尔vPro博锐技术激活 参考: Intel官方Management Engine BIOS Extension (Intel®MEBX)手册:http://www.intel.com/conten ...