• Unchanged(持久态)
  • Midified(修改)
  • Deleted(删除)
  • Added(新增)
  • Detached(游离态:相当于new出来的和数据库无关,在我看来也该就是using的时候的状态)

解释一下整个图的流程吧。

Added,也就是从游离态到 Added新增状态,在集合DbSet调用Add()方法之前都是处于游离的状态,调用之后就变成了Added(在没有Savechanges()之前)

在调用Savechanges之后就和数据库同步了,这个时候它的状态就变成 Unchanged(持久态:没有发生变化)。

Midified,对于修改,平常在做项目的时候发现做修改要先从数据库取得数据,然后对某一属性(字段)进行修改,在调用Savechanges后,又回到Unchanged状态了。

Deleted,删除,和修改原理差不多,在调用Remove()方法之后,就变成Deleted状态,这个比较好理解。但是在我还没进行Savechanges之前它此时的状态还是Deleted。在Savechanges()之后它就会回到原始的Detached(游离态),此时数据库数据已经没有了,但是这个对象还存在。

using(Context db=new Context)
{var type= db.Book.Find(1);  Console.WriteLine(db.Entry(type).State);     //此时只是从数据库取出来,所以状态应该是Unchanged持久态db.Book.Remove(type);Console.WriteLine(db.Entry(type).State); //此时调用Remove()状态,还没有保存之前,应该是Deleteddb.SaveChanges();Console.WriteLine(db.Entry(type).State); //调用SaveChanges()方法之后,此时状态应该是回到Detached游离态,这个时候彻底的和数据库没有关系了
}

实际上在做删除的时候可以不需要从数据库中查一次,这样也是减少了sql语句的执行,性能也会相应的提高,但是这个方法也是比较笨重。

var type=new Models.Book(){Id=1};
Console.WriteLine(db.Entry(type).State); //此时new了一下和数据库无关所以状态是Detached
db.Entry(type).State=System.Data.Entity.EntityState.Unchanged; //欺骗服务器,不经过数据库直接改状态
db.Book.Remove(type);
Console.WriteLine(db.Entity(type).State); //Remove()后,此时状态应该是Deleted
db.SaveChanges();
Console.WriteLine(db.Entity(type).State);  //此时状态又回到了Detached

EntityFramework 的5种状态-简记相关推荐

  1. linux六种进程状态,Linux操作系统中进程的七种状态

    Linux操作系统中进程的七种状态 发布时间:2018-05-07 20:43, 浏览次数:741 , 标签: Linux 1 Linux中进程的七种状态(1)R运行状态(runing):并不意味着进 ...

  2. CPU被夺走的三种状态 执行时间久了 IO操作让cpu等待 被优先级高的抢占

    CPU被夺走的三种状态   .                           cpu的三种状态之              运行态      就绪态等待被调用             阻塞态 i ...

  3. AntD Checkbox 的三种状态处理

    对于单个 Checkbox 来说,只有两种值:选中 (checked) 或未选中 (unchecked) . 但对于 Checkbox Group 来说,却有三种值:全选 (checked) .部分选 ...

  4. zabbix Server 4.0 监控TCP的12种状态

      zabbix Server 4.0 监控TCP的12种状态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大家对TCP三次握手比较熟悉了,都知道当发生DOSS攻击时,客户端发送 ...

  5. 线程五种状态(新建、就绪、运行、阻塞、死亡)

    线程的5种状态: 每个 Java 程序都有一个缺省的主线程,对于 Java 应用程序,主线程是 main()方法执行的线索: 对于 Applet 程序,主线程是指挥浏览器加载并执行 Java Appl ...

  6. 量子计算的基本原理——本质上是在操作薛定谔的猫(同时去运算和操作死+不死两种状态)...

    摘自:https://www.zhihu.com/question/26933442/answer/34797301 更新了!~更新了!稍微写的更详细一点.我觉得这样应该能懂了. 请专家指正.下面论述 ...

  7. TCP协议连接的11种状态浅谈

    了解TCP的协议可以在很大程度上帮助我们分析服务器当前的TCP连接状态,同时也是排查一些网络故障的基础,首先来看一下TCP协议的三次握手与四次断开. TCP协议三次握手   1.客户端首先发起连接,也 ...

  8. TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是"虚拟局域网".LAN可以是由少数几台家用计算机构成的网络,也可以是 ...

  9. 【Java 并发编程】线程锁机制 ( 锁的四种状态 | 无锁状态 | 偏向锁 | 轻量级锁 | 重量级锁 | 锁竞争 | 锁升级 )

    文章目录 一.悲观锁示例 ( ReentrantLock ) 二.重量级锁弊端 三.锁的四种状态 ( 无锁状态 | 偏向锁 | 轻量级锁 | 重量级锁 ) 四.锁的四种状态之间的转换 ( 无锁状态 - ...

最新文章

  1. 看大众点评如何通过实时监控系统CAT打造7*24服务
  2. 盘点 HashMap 源码中的那些优雅的设计!
  3. 线程A向队列Q中不停写入数据,线程B从列队Q中不停读取数据(只要Q中有数据)。
  4. 脉冲宽度调制pdm_NHWYM脉冲硬质氧化电源-高压脉冲电源-双极性脉冲电源品牌-济南能华...
  5. 20145204 《Java程序设计》第6周学习总结
  6. GB2312 UTF8 UCS2汉字编码对应表
  7. kotlin 添加第一个 集合_Flutter开发必学Dart语法篇之集合操作符函数与源码分析...
  8. oracle之数据处理之约束2
  9. ssh本地端口转发,远程端口转发,隧道(这个解释不饶)
  10. 那些年我们一起写过的Python爬虫
  11. 第三天:完善数据层(controller)真正对接数据库Mysql
  12. [转]@html.ActionLink的几种参数格式
  13. gsp计算机管理权限,新gsp计算机权限设置
  14. 中国传统文化课程笔记
  15. idea output 窗口悬浮
  16. 锐思财经专访:冒志鸿解读 Libra | ArcBlock 媒体
  17. carla学习笔记(二)
  18. 行业分析:中国企业网盘市场目前现状及未来发展透视
  19. 百度编辑器Editor 1.4.3.2 asp.net版最新使用方法
  20. 15-关于GNN的局限性以及其解决办法

热门文章

  1. 对话系统的历史 聊天机器人发展
  2. 什么是人工智能?你需要知道的关于人工智能的一切
  3. 计算机开机慢更新配置,系统开机慢?教你如何提高电脑开机速度!
  4. 杠杆炒股亏盈计算方法?
  5. 完美实现无毛边异形窗体
  6. matlab 压缩感知矩阵_【精读】基于MATLAB的钢筋下料优化算法
  7. Postman Collection Format v1 is no longer supported and can not be imported directly. You may conver
  8. 编译winmerge源代码
  9. java poi 操作word遇到的问题
  10. 远程计算机或许不支持所需的,WIN10远程计算机不支持所需的FIPS安全级别解决