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 命令 ,可以更 ...
随机推荐
- K8S从入门到放弃系列-(7)kubernetes集群之kube-scheduler部署
摘要: 1.Kube-scheduler作为组件运行在master节点,主要任务是把从kube-apiserver中获取的未被调度的pod通过一系列调度算法找到最适合的node,最终通过向kube-a ...
- jmeter BeanShell实例-----两个变量之间的断言对比(转)
jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...
- day0~day13
day0 day1 day2 day4 day5 day7 day9 day10 day12 day13
- 利用Python进行数据分析_Pandas_数据结构
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 首先,需要导入pandas库的Series和DataFrame In [21] ...
- Winscp隧道实现-跳板机/跨机连接
隧道用的是公网ip,登陆用的是私网ip 一张图应该就能看懂,后续用到新的功能继续编辑
- WUSTOJ 1251: 报数游戏(Java)
1251: 报数游戏 原题链接 Description n个人站成一行玩一个报数游戏.所有人从左到右编号为1到n.游戏开始时,最左边的人报1,他右边的人报2,编号为3的人报3,等等.当编号为n的人(即 ...
- SAS学习笔记13 SAS数据清洗和加工(续)
查找缺失值 cha[*]和num[*]是建立数组cha和num,但不指定数组中的元素数 自动变量_character_表示数据集中的所有字符型变量 自动变量_numeric_表示数据集中的所有数值型变 ...
- .NET Core 常用第三方包
.NET Core 常用第三方包 作者:高堂 原文地址:https://www.cnblogs.com/gaotang/p/10845370.html 写在前面 最近在学习.NET Core 中经常用 ...
- 分享一张理解数据库inner join,left join,right join,full join的图
- stm32 usart 串口
比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps).如每秒钟传送240个字符, 而每个字符格式包含10位(1个起始位.1个停止位.8个数据位),这时的比特率为: 10位 × 240个/秒 = ...