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的更多相关文章

  1. EF DBContext中DbSet中Hashset添加对象后,DataGrid UI没有刷新的问题

    使用EF4/5添加数据库视图生成DBContext,如果数据表/对象之间有M-N对应关系,EF对自动添加引用类集合,是Hashset类型.由于不是ObservableCellection类型,在引用类 ...

  2. 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决过程

    发现问题 需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度.想的很美好,于是快速撸了类似下面的一串代码: using (va ...

  3. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  4. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  5. Repository模式中,Update总是失败及其解析

    在Repository模式中,我的Update方法总是无法更新实体,这个非常郁闷,Update方法如下: 1: public virtual void Update(T entity) 2: { 3: ...

  6. Repository模式中,Update总是失败及其解析(转)

    出处:http://www.cnblogs.com/scy251147/p/3688844.html 关于Entity Framework中的Attached报错的完美解决方案终极版 前发表过一篇文章 ...

  7. EntityFramework 学习 一 DbSet

    DBSet类表示一个实体的集合,用来创建.更新.删除.查询操作,DBSet<TEntity>是DBSet的泛型版本 你可以使用DbContext获取DBSet的引用,例如dbContext ...

  8. EF中加载实体的方式

    EF中的查询执行时机:1. foreach进行枚举2. ToArray.ToList.ToDictionary3. Linq的一些操作,如First.Any4. DbSet上的Load操作.DbEnt ...

  9. EF中的EntityState几个状态的说明

    之前使用EF,我们都是通过调用SaveChanges方法把增加/修改/删除的数据提交到数据库,但是上下文是如何知道实体对象是增加.修改还是删除呢?答案是通过EntityState枚举来判断的,我们看一 ...

随机推荐

  1. 二、jenkins配置email(以腾讯企业qq为例)

    废话不多说,直接上干货: 主要针对两个部分进行介绍: 1.jenkins内置的邮件功能: 2.Editable Email Notification插件的邮件功能: 低版本的jenkins有很多插件都 ...

  2. 【Consul】Consul实践指导-配置文件

    Agent有各种各样的配置选项,这些配置选项可以通过命令行参数的方式设定,也可用通过配置文件的方式设定--所有的配置选项都是可选的,当然也是有默认值的. 当加载配置选项时,consul是按照词典顺序从 ...

  3. poi操作word 2007 常用方法总结

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...

  4. js 的 defer 和async属性

    添加defer延迟属性,脚本将立即下载,但会延迟到整个页面解析完毕后按顺序执行.会先于DOMContentLoaded事件执行. 添加async异步属性,脚本将立即下载,执行时不会等待其他脚本,不一定 ...

  5. sql中问号是干什么的??

    第一次在后台 程序中遇到sql语句中的问号: /** * * 方法描述 : 通过账号id更新该账号状态 * @param state 状态 * @param id 账号id */ @Modifying ...

  6. Linux实战教学笔记27:Nginx详细讲解

    前言:nginx的特点 本节主要对Nginx Web服务软件进行介绍,涉及Nginx的基础,特性,配置部署,优化,以及企业中的日常运维管理和应用.作为HTTP服务软件的后起之秀,Nginx与它的老大哥 ...

  7. css的优先级和权重问题 以及!important优先级

    一,前言: 刚加的css怎么没有渲染出来?浏览器中查看,发现是被其他的css给覆盖了,相信我们都曾遇到过这样的问题.那么浏览器是如何选择css标签的渲染顺序的呢?换句话说,css选择器的优先级是怎么规 ...

  8. Hibernate多对多操作

    ---------------------siwuxie095 Hibernate 多对多操作 以用户和角色为例 (一)多对多映射配置 第一步:创建两个实体类,用户和角色 第二步:让两个实体类之间互相 ...

  9. JNDI数据源

    孤傲苍狼 只为成功找方法,不为失败找借口! JNDI学习总结(一)——JNDI数据源的配置 一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Cla ...

  10. springboot用于web开发

    1.使用SpringBoot:1)创建SpringBoot应用,选中我们需要的模块:2)SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来3)自己编写业务代码 ...