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. 点亮文字(CSS)

    html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...

  2. [bzoj4368][IOI2015]boxes纪念品盒_动态规划_单调队列_贪心

    bzoj4368 IOI2015 boxes纪念品盒 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4368 数据范围:略. 题解: 如果在一个最 ...

  3. ABP中的本地化处理(上)

    今天这篇文章主要来总结一下ABP中的多语言是怎么实现的,在后面我们将结合ABP中的源码和相关的实例来一步步进行说明,在介绍这个之前我们先来看看ABP的官方文档,通过这个文档我们就知道怎样在我们的系统中 ...

  4. Sql server 中count() 与 sum() 的区别

    一句话概括就是Sum(列) 是求和,把所有列的值进行汇总求和:COUNT(列) 是行数汇总,只要列的值不为Null,就会增加1: 举个例子说明下: --创建临时表结构 CREATE TABLE Tem ...

  5. keras损失函数详解

    以下信息均来自官网 ------------------------------------------------------------------------------------------ ...

  6. 删除列表的三个方式(python)

    del是个语句而不是方法 del member[1]:通过下标进行删除 del member:也可删除整个列表 remove():根据列表元素本身来删除,而不是通过下标 member.remove(' ...

  7. go 通过赋值给 _ 来忽略序号和值

    go 语言中 只要想忽略的值都需要用 下划线 _ 来代替 package main import "fmt" func main() {     pow := make([]int ...

  8. MySQL 使用tee记录语句和输出日志

    在mysql命令行中,使用tee命令,可以记录语句和输出到指定文件.在debugging时会很有用.每执行一条语句,mysql都会讲执行结果刷新到指定文件.Tee功能只在交互模式生效. mysql&g ...

  9. spring整合quartz框架

    spring整合quartz: 网上也有很多教程,好多都是基于配置方式,我们使用当然怎么简单就怎么用,所以这里介绍基于注解方式整合quartz.前提:你需要有一个能运行的web项目. 1.引依赖: & ...

  10. Centos7.5 安装JDK1.8 步骤

    1.下载JDK安装包 先下载好JDK1.8 的安装包,下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downlo ...