• EntityFrameworkCore中的实体状态


    Entry表示一个追踪,里面有state属性,是EntityState的枚举类型。

    每一个实体都有一个相对应的Entry:

    var entry = dbContext.ChangeTracker.Entries<Student>().FirstOrDefault(entity => entity.Entity == studentTemp);

    下面总结一下各个状态的说明:

    Added:实体还未插入到数据库当中,当调用SaveChanges后将修改其状态并将实体插入到数据库。

    调用DbContext.Add()方法将实体添加到当前上下文,就会显示这个状态。

    UnChanged:实体存在数据库中,但是在客户端未进行修改,当调用SaveChanges后将忽略。

    从数据库查询还没有做变更、Attach方法执行后是这个状态。

    Modified:实体存在数据库中,同时实体在客户端也进行了修改,当调用SaveChanges后将更改其状态并更新数据持久化到数据库。

    从数据库里面查询出来,并进行了修改,就是这个状态。

    Deleted:实体存在数据库中,当调用SaveChanges方法后将删除实体。

    执行了Remove方法后就是这个状态。

    Add:当调用Add方法时就没什么可说的了,此时将在图中的对应的所有实体推入到Added状态,也就说在调用SaveChanges时将会插入到数据库中去。

    Attach:当调用Attach方法时将在图中的所有实体推入到UnChanged状态,但是有一个额外情况,比如我们在一个类中添加导航属性数据时,此时Attach的话将会使用混合模式,将此实体的状态为UnChanged而导航属性的状态则是Added状态,所以当插入到数据库中时,这个已存在的数据将不会被保存,只有新添加的导航属性数据才会被插入到数据库中去。

    Update:Update方法和Attach方法一样只是将其状态修改为Modified,而将新添加的实体的修改将进行插入。

    Remove:当调用Remove方法时此时它只会影响传递给该方法的实体,不会去遍历实体的可到达图。如果一个实体的状态是UnChanged或者Modified,说明该实体已存在数据库中,此时只需将其状态修改为Deleted。如果实体的状态为Added,此时说明该实体在数据库中不存在,此时会脱离上下文而不被跟踪。所以Remove方法侧重强调实体要被追踪,否则的话需要首先被Attach然后将其推入到Deleted状态。

  • 相关阅读:
    从B树、B+树、B*树谈到R 树
    1.红黑树和自平衡二叉(查找)树区别 2.红黑树与B树的区别
    红黑树 Java实现
    自平衡二叉(查找树/搜索树/排序树) binary search tree
    从零开始: 二叉查找
    深入理解JAVA虚拟机JVM
    java中的变量各占得字节数
    java中new两个对象,在堆中开辟几个对象空间
    Spring面试,IoC和AOP的理解, @Transactional原理及使用
    EasyUI Tabs + Yii2.0实现iframe方式打开页面(解决共用静态文件引入加载的问题)
  • 原文地址:https://www.cnblogs.com/pangjianxin/p/8385167.html
Copyright © 2020-2023  润新知