DbSet中Find,AsNoTracking,Attach及DBEntityEntry,ChangeTracker
Find,AsNoTracking,Attach,DBEntityEntry,ChangeTracker,Local
一:DBSet
我们在SaveChange的时候,如果获取到DbSet中一些Entity的变化。。。。
二:我们如果动态的detect这些entity的变化。。。
1. DBEntityEntry.... 可以获取的到某一个entity的实时状态。。。
db.Entry => 它的result类型。。
《1》 可以被detect entity的哪些属性:
State: Modified
OriginalValues: myentity.OriginalValues["StudentName"]
CurrentValues: myentity.CurrentValues["StudentName"]
2. ChangeTracker: 可以获取得到当前dbcontext下面的所有entity的变化。。。。
result类型就是 IEnumerable<DbEntityEntry>
{System.Data.Entity.Infrastructure.DbEntityEntry}
CurrentValues: {System.Data.Entity.Infrastructure.DbPropertyValues}
Entity: {ConsoleApplication30.Student}
InternalEntry: {System.Data.Entity.Internal.InternalEntityEntry}
OriginalValues: “(entityList.FirstOrDefault()).OriginalValues”引发了类型“System.InvalidOperationException”的异常
State: Added
_internalEntityEntry: {System.Data.Entity.Internal.InternalEntityEntry}
using (SchoolDBEntities db = new SchoolDBEntities())
{
//update操作
var item = db.Students.FirstOrDefault();
item.StudentName = "张三";
//add操作
db.Students.Add(new Student() { StudentName = "王五" });
//删除操作
var myitem = db.Students.FirstOrDefault(i => i.StudentID == 3);
db.Students.Remove(myitem);
//检测到当前db下面所有被跟踪的实体
var entityList = db.ChangeTracker.Entries();
foreach (var entity in entityList)
{
}
}
从这个例子中,我们可以看到,确实可以跟跟踪,方便我们去检测entity的状态。。。。
三:Local
这个Local只跟踪CUR操作。。。 ChangeTracker有一点点不一样。。。
Local只能针对某一个DBset而言。。。
ChangeTracker可以跟踪整个DbContext。。。。
Entry 只能跟踪某一个实体。。。
四:看一下DBSet下面的其他属性
using (SchoolDBEntities db = new SchoolDBEntities())
{
//update操作
var item = db.Students.FirstOrDefault();
item.StudentName = "张三";
//add操作
db.Students.Add(new Student() { StudentName = "王五" });
//删除操作
var myitem = db.Students.FirstOrDefault(i => i.StudentID == 3);
db.Students.Remove(myitem);
foreach (var mylocal in db.Students.Local)
{
}
////检测到当前db下面所有被跟踪的实体
//var entityList = db.ChangeTracker.Entries();
//foreach (var entity in entityList)
//{
//}
}
1. AsNoTracking()
using (SchoolDBEntities db = new SchoolDBEntities())
{
//update操作
var item = db.Students.AsNoTracking().FirstOrDefault();
item.StudentName = "张三";
var item2 = db.Students.FirstOrDefault();
item2.StudentName = "李四";
var track1 = db.Entry(item);
var trace2 = db.Entry(item2);
}
track1
{System.Data.Entity.Infrastructure.DbEntityEntry`1[ConsoleApplication30.Student]}
CurrentValues: “track1.CurrentValues”引发了类型“System.InvalidOperationException”的异常
Entity: {System.Data.Entity.DynamicProxies.Student_3D2C2AEAA0104FF4F10F5ECE055C297922EDA7306BF72635BE0EE3A849DCA14A}
OriginalValues: “track1.OriginalValues”引发了类型“System.InvalidOperationException”的异常
State: Detached
_internalEntityEntry: {System.Data.Entity.Internal.InternalEntityEntry}
trace2
{System.Data.Entity.Infrastructure.DbEntityEntry`1[ConsoleApplication30.Student]}
CurrentValues: {System.Data.Entity.Infrastructure.DbPropertyValues}
Entity: {System.Data.Entity.DynamicProxies.Student_3D2C2AEAA0104FF4F10F5ECE055C297922EDA7306BF72635BE0EE3A849DCA14A}
OriginalValues: {System.Data.Entity.Infrastructure.DbPropertyValues}
State: Modified
_internalEntityEntry: {System.Data.Entity.Internal.InternalEntityEntry}
DbSet仓储模式自带的一个Find操作。。。
//update操作
var item = db.Students.Find(2);
DbSet中Find,AsNoTracking,Attach及DBEntityEntry,ChangeTracker的更多相关文章
- EF DBContext中DbSet中Hashset添加对象后,DataGrid UI没有刷新的问题
使用EF4/5添加数据库视图生成DBContext,如果数据表/对象之间有M-N对应关系,EF对自动添加引用类集合,是Hashset类型.由于不是ObservableCellection类型,在引用类 ...
- 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决过程
发现问题 需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度.想的很美好,于是快速撸了类似下面的一串代码: using (va ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- Repository模式中,Update总是失败及其解析
在Repository模式中,我的Update方法总是无法更新实体,这个非常郁闷,Update方法如下: 1: public virtual void Update(T entity) 2: { 3: ...
- Repository模式中,Update总是失败及其解析(转)
出处:http://www.cnblogs.com/scy251147/p/3688844.html 关于Entity Framework中的Attached报错的完美解决方案终极版 前发表过一篇文章 ...
- EntityFramework 学习 一 DbSet
DBSet类表示一个实体的集合,用来创建.更新.删除.查询操作,DBSet<TEntity>是DBSet的泛型版本 你可以使用DbContext获取DBSet的引用,例如dbContext ...
- EF中加载实体的方式
EF中的查询执行时机:1. foreach进行枚举2. ToArray.ToList.ToDictionary3. Linq的一些操作,如First.Any4. DbSet上的Load操作.DbEnt ...
- EF中的EntityState几个状态的说明
之前使用EF,我们都是通过调用SaveChanges方法把增加/修改/删除的数据提交到数据库,但是上下文是如何知道实体对象是增加.修改还是删除呢?答案是通过EntityState枚举来判断的,我们看一 ...
随机推荐
- Tkinter Menubutton(菜单按钮)
Python - Tkinter Menubutton: 一个菜单按钮是一个下拉菜单,在屏幕上停留时间的一部分.菜单的小工具,可以显示该菜单按钮的选择,当用户点击它与每个menubutton时. ...
- day-9心得
操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入 ...
- 腾讯安全反病毒实验室解读“Wannacry”勒索软件
背景 针对昨日英国医院被攻击,随后肆虐中国高校的 WannaCry 勒索事件,腾讯安全反病毒实验室第一时间给出了深度权威的分析.此次勒索事件与以往相比最大的亮点在于,勒索病毒结合了蠕虫的方式进行传播, ...
- CSS——创建css
CreateInlineStyle: function () { //创建一个内联样式表 var style = document.createElement('style'); //创建一个styl ...
- C#接口的三种实现方式
转自原文C#接口的三种实现方式 public interface MyInterface { /// 下面三个方法的签名都是 /// .method public hidebysig newslot ...
- mongodb(二)
数据准备: var persons = [{ name:"jim", age:25, email:"75431457@qq.com", c:89,m:96,e: ...
- Tornado 多进程 & 异步
另外一篇:http://www.cnblogs.com/xiaoshi657/p/6945208.html 基本版: #coding=utf-8 import tornado.web import t ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十周
---恢复内容开始--- Java学习第十周 本周,学习泛型程序设计,泛型也被称为参数化类型(parameterized type),就是在定义类.接口和方法时,通过类型参数指示将要处理的 ...
- Linux实战教学笔记42:squid代理与缓存实践(一)
第1章 Squid介绍 1.1 缓存服务器介绍 缓存服务器(英文意思cache server),即用来存储(介质为内存及硬盘)用户访问的网页,图片,文件等等信息的专用服务器.这种服务器不仅可以使用户可 ...
- HttpClient由Client客户端上传File文件流至Server服务端
客户端方法 public static void main(String[] args) { File file=new File("E:\\lucene\\rev\\全年平台受理量.doc ...