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状态。
EntityFrameworkCore中的实体状态的更多相关文章
- EF4.1: Add/Attach and Entity States(EF中的实体状态转换说明)
实体的状态,连接以及 SaveChanges 方法 数据库上下文对象维护内存中的对象与数据库中数据行之间的同步.这些信息在调用 SaveChanges方法被调用的时候使用.例如,当使用 Add 方法传 ...
- Entity Framework 实体状态
从今天开始我们开始讲解EF中的实体状态和数据操作,这篇文章先讲解实体状态. 我们通过前面的学习,知道EF通过上下位负责跟踪实体的状态,实体状态的位置是在命名空间 System.Dat.Entity 里 ...
- Hibernate中的实体规则、对象状态和进阶-一级缓存
一.hibernate中的实体规则 1.实体类创建的注意事项 2.主键类型 3.主键生成策略 (1)代理主键 (2)自然主键 二.hibernate中的对象状态 1.对象分为三种状态 2.三种状态的转 ...
- EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态
本文目录 查看实体当前.原始和数据库值:DbEntityEntry 查看实体的某个属性值:GetValue<TValue>方法 拷贝DbPropertyValues到实体:ToObject ...
- 《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5 从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数 ...
- 【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查
讲解之前,先来看一下我们的数据库结构:班级表 学生表 如上图,实体状态由EntityState枚举定义:Detached(未跟踪).Unchanged(未改变).Added(已添加).Deleted( ...
- flask中的session cookie 测试 和 项目中的用户状态保持
# -*- coding:utf-8 -*- # Author: json_steve from flask import Flask, current_app, make_response, req ...
- Entity Framework 教程——Entity Framework中的实体类型
Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
随机推荐
- 用static声明外部变量与内、外部函数
1.用static声明外部变量 若希望某些外部变量只限于被本文件引用,而不能被其他文件引用,可以在定义外部变量时加一个static声明. 例:(file1.c) #include <stdafx ...
- JAVA 容易忽略的东西
Java中的取余会出现负数.用Math.floorMod()方法可以掰正,但是也仅限被除数是负数的情况,如果除数是负数,这个没用. 和C不一样,Java中的字符串是不可变字符串,不能修改Java字符串 ...
- https 建立连接过程
http://blog.csdn.net/wangjun5159/article/details/51510594 思考问题的顺序 学技术时,总是会问什么?这里也不例外,https为什么会存在,它有什 ...
- ubuntu如何安装 adobe flash player或adobe插件
方法/步骤 第一步当然是打开终端控制器.有很多方法,这里推荐使用快捷键:ctrl+alt+T.快捷又方便. 然后更新源列表,使用如下命令:sudo apt-get update,后面要输入密码. 下面 ...
- ubuntu下安裝sogou拼音
方法/步骤 打开搜狗输入法Linux版的官网http://pinyin.sogou.com/linux/?r=pinyin,并下载你需要的版本,这里选择64位版. 在Ubuntu14.01下可以直接点 ...
- 分布式消息中间件rocketmq的原理与实践
RocketMQ作为阿里开源的一款高性能.高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ 有哪些关键特性?其实现原理是怎样的? 关键特性以及其实现原理 一.顺序消息 消息有序指的是 ...
- DP 魔族密码 LIS
题目描述 风之子刚走进他的考场,就…… 花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花) 风之子:我呕……(杀死人的眼神)快说题目!否则……-_-### 花花:……咦好冷我们现在 ...
- centos 防火墙的操作
systemctl start firewalld systemctl restart firewalld systemctl status firewalld systemctl enable fi ...
- 【编辑器】Visual Studio Code
1.官网:https://code.visualstudio.com/Download 2.插件:https://marketplace.visualstudio.com/VSCode https:/ ...
- 2018-2019-2 20175310实验一《Java开发环境的熟悉》实验报告
2018-2019-2 20175310实验一<Java开发环境的熟悉>实验报告 一.实验步骤及内容 (一).Java开发环境的熟悉-1 1.建立20175310exp1的目录 2.在20 ...