Entity Framework二、 模型优先 ,ObjectContext类
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类的更多相关文章
- Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1
这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...
- Asp.Net MVC 模型(使用Entity Framework创建模型类)
这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...
- ADO.NET Entity Framework学习笔记(3)ObjectContext
ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转] 说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...
- 【Entity Framework】初级篇--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍
本节,简单的介绍EF中的ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager这个几个比较重要的类,它们都位于System.Data ...
- Asp.Net MVC 使用Entity Framework创建模型类
先来说说LINQ to SQL和Entity Framework的区别: LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术.他们之间的本质区别在于EF ...
- Entity Framework 学习初级篇2--ObjectContext类的介绍
转自:http://www.cnblogs.com/Tally/archive/2012/09/14/2685014.html 本节,简单的介绍EF中的ObjectContext.ObjectQuer ...
- Entity Framework 二
本篇主要介绍:创建了实体数据模型,生成了那些文件以及其代表意义 创建实体数据模型 上一篇的最后,我们创建了数据库,现在我们利用数据库来生成我们的实体数据模型,这种形式我们称为数据库优先,后面会介绍代码 ...
- Entity Framework 教程——模型浏览器
模型浏览器: 在之前的章节中,我们创建了第一个关于学校的实体数据模型.但是EDM设计器并没有将他所创建的所有对象完全显示出来.它只将数据库中的被选择的表与视图显示出来了. 模型浏览器可以将EDM所创建 ...
- Entity framework 更改模型,新增表
在Package Manager Console 中运行命令Enable-Migrations 再次运行可以更新 抄袭 在实体类中增加一个属性以后,执行 Update-Database 命令 ,可以更 ...
随机推荐
- Chocolate Eating【二分】
题目链接:https://ac.nowcoder.com/acm/contest/1577/K 题目大意: 给出n块巧克力,m天吃完.每块巧克力有a[i]快乐值,每天可以选择吃任意块或者不吃巧克力(按 ...
- 解决maven项目无法读取src/main/java目录下面的配置文件问题
我们在用Mybatis去操作底层数据库的时候,需要用到xml配置文件,一般我们是把配置文件和dao放置在同一层目录. 但是在用idea操作maven项目的时候,我们可能会遇到无法读取到dao对应的ma ...
- FishingMaster(HDU-6709)【贪心】
题目链接:https://vjudge.net/problem/HDU-6709 题意:一个人要抓n条鱼,每抓一条鱼用时K,每烹饪一条鱼用时a[i],抓鱼的过程不能被打断,烹饪鱼的时候可以抓鱼,也可以 ...
- C++Primer 5th Chap3 Strings,Vectors, and Arrays
使用名字空间成员的简单方法: using namespace ::name;例如:using std::cin; 头文件不应包含using声明 标准库类型string:(需要带有头文件#include ...
- WUSTOJ 1283: Hamster(Java)
1283: Hamster 参考博客 wust_tanyao的博客 题目 第0个月有1对仓鼠.仓鼠的寿命是M个月,仓鼠成年后每个月生一对仓鼠(一雌一雄),问N个月后有仓鼠多少对.更多内容点此链接 ...
- SpringBoot exception异常处理机制源码解析
一.Spring Boot默认的异常处理机制 1:浏览器默认返回效果 2:原理解析 为了便于源码跟踪解析,在·Controller中手动设置异常. @RequestMapping(value=&quo ...
- 怎样理解window.name
window.name表示当前窗口的名字, 而非网页的名字, 网页的名字需要使用: document.title; window.name一般是空的字符串, 他的作用其实是配合配合超链接和表单的tar ...
- 【Transact-SQL】统计某字段中的值第一次出现后的2小时内出现的次数
原文:[Transact-SQL]统计某字段中的值第一次出现后的2小时内出现的次数 table1 name createdate a 2011-03-01 10:00:00 a 2011-03-01 ...
- MySql外网不能访问设置
mysql的root账户,我在连接时通常用的是localhost或127.0.0.1,公司的测试服务器上的mysql也是localhost所以我想访问无法访问,测试暂停. 解决方法如下: 1,修改表, ...
- vue elment table根据返回值修改样式
今天在写vue项目的时候,查询出的数据库的数据想根据条件修改显示.查询资料有一个 :formatter,可以实现这个效果,废话不多说,这个是我的例子: <el-table-column prop ...