Entity Framework Core系列教程-22-跟踪实体图(TrackGraph)

2023-11-14

Entity Framework Core中的ChangeTracker.TrackGraph()

在上一章中,您了解了不同的方法为Entity Framework Core 2中的实体图的每个实体设置不同的EntityState。在这里,您将学习如何跟踪实体图并为图中的每个单个实体设置适当的EntityState。
Entity Framework Core中引入了ChangeTracker.TrackGraph()方法,以跟踪整个实体图并将自定义实体状态设置为图中的每个实体。
方法签名: public virtual void TrackGraph(object rootEntity, Action<EntityEntryGraphNode> callback)
ChangeTracker.TrackGraph()方法开始跟踪实体以及通过遍历其导航属性可到达的任何实体。为每个发现的实体调用指定的回调,并且必须为每个实体设置适当的EntityState。回调函数使我们可以实现自定义逻辑来设置适当的状态。如果未设置任何状态,则实体保持未跟踪状态。
下面的示例演示TrackGraph方法。

var student = new Student() { //Root entity (with key value)
    StudentId = 1,
    Name = "Bill",
    Address = new StudentAddress()  //Child entity (with key value)
    {
        StudentAddressId = 1,
        City = "Seattle",
        Country = "USA"
    },
    StudentCourses = new List<StudentCourse>() {
            new StudentCourse(){  Course = new Course(){ CourseName="Machine Language" } },//Child entity (empty key)
            new StudentCourse(){  Course = new Course(){  CourseId=2 } } //Child entity (with key value)
        }
};
var context = new SchoolContext();
            
context.ChangeTracker.TrackGraph(student, e => {
                                                if (e.Entry.IsKeySet)
                                                {
                                                    e.Entry.State = EntityState.Unchanged;
                                                }
                                                else
                                                {
                                                    e.Entry.State = EntityState.Added;
                                                }
                                            });

foreach (var entry in context.ChangeTracker.Entries())
{
    Console.WriteLine($"Entity: {entry.Entity.GetType().Name}, 
                        State: {entry.State.ToString()} ");
}

Output:
Entity: Student, State: Added
Entity: StudentAddress, State: Unchanged
Entity: StudentCourse, State: Added
Entity: Course, State: Added
Entity: StudentCourse, State: Added
Entity: Course, State: Unchanged

在上面的示例中,ChangeTracker.TrackGraph()方法用于为学生实体图中的每个实体设置状态。第一个参数是实体图,第二个参数是设置每个实体状态的函数。我们使用lambda表达式为具有有效键值的实体设置了“不变”状态,为具有空键值的实体设置了“添加”状态。当实体具有有效的键属性值时,IsKeySet变为true。
因此,我们可以使用ChangeTracker.TrackGraph()方法为图中的每个实体设置不同的EntityState。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Entity Framework Core系列教程-22-跟踪实体图(TrackGraph) 的相关文章

  • c++的cout输出

    1 c 的cout输出顺序是从左往右进行输出 但是是从右往左压入栈 2 c 的cout的输出是遇到函数是若函数内右cout的操作则立即执行 3 不同编译器对相同语句的编译规则是不一样的 所以最好不要对同一变量进行多次的修改 也不用深究 没有
  • go语言如何编译为可执行文件

    使用系统自带的cmd找到main函数所在位置 1 go build go即可把go程序编译成exe文件 2 go run go就可以运行go程序了 3 便宜源代码 官方说使用go build fileName 编译出来的就直接带有调试信息了
  • bash: ifconfig: 未找到命令 解决方案

    解决思路 1 ifconfig 命令存在的情况 首先查看 ifconfig 命令在哪个目录下 顺便检查是否安装了这个命令 whereis ifconfig 然后查看 echo PATH PATH 中是否包含了这个目录 一般情况下是不包含的
  • 前端开发都需要掌握那些技术?

    前端技术多且杂 那么作为前端开发者 我们可以从那些方面进行进阶提升呢 本文从以下几个方面进行了整理归纳 内容如下 一 网页开发 二 小程序 三 移动端 四 桌面端 五 其他技术 一 网页开发 这里指PC端网页开发 要求的技术主要有以下几类
  • 华为OD机试(JAVA)真题 -- 最长(连续)子串

    import java util Scanner 给定一个字符串 只包含字母和数字 按要求找出字符串中的最长 连续 子串 字符串本身是其最长的子串 子串要求 只包含 1 个字母 a z A Z 其余必须是数字 字母可以在子串中的任意位置 如
  • shell自动部署docker及docker-compose

    一 准备环境 centos7 6及centos7 9已通过测试 测试时服务器刚刚完成初始化 未修改任何配置 可以直接运行脚本进行安装 要求主机可以访问互联网 yum环境在脚本中已自动准备 将两个脚本直接复制放到root目录下 赋予可执行权限

随机推荐

  • NGUI学习笔记汇总

    NGUI学习笔记汇总 适用于NGUI2 x NGUI3 x 一 NGUI的直接用法 1 Attach a Collider 表示为NGUI的某些物体添加碰撞器 如果界面是用NGUI做的 只能这样添加 注 用Component添加无效 2 A
  • 前端WEB安全

    一 浏览器安全 首先了解前端web安全知识 比不可绕开的基础就是同源策略了 同源策略 Same Origin Policy 是一种约定 它是浏览器最核心也最基本的安全功能 如果缺少了同源策略 则浏览器的正常功能可能都会受到影响 可以说Web
  • 你想改变现在的生活吗?

    你想改变现在的生活吗 你想加薪吗 想买车吗 想找到你生命中的另一半吗 去学习吧 学校是个神奇的地方
  • 记一次解决联想笔记本冬天卡顿反应慢的方法

    个人简介 个人主页 九黎aj 幸福源自奋斗 平凡造就不凡 如果文章对你有用 麻烦关注点赞收藏走一波 感谢支持 欢迎订阅我的专栏 autojs 图携带方便买了一个联想笔记本 然后发现笔记本充电时候正常 不卡 不充电时候会卡0 4Ghz ctr
  • Java包装类、自动装箱与拆箱知识总结

    因为在学习集合时知道集合里存放的对象都是Object类型 取出的时候需要强制类型转换为目标类型 使用泛型集合不需要 如int a Integer arrayList get 0 然后我们就会发现 为什么要强制转换为Integer 而不是in
  • C++中const,指针和引用

    C 中的const 指针和引用 在线C C 编译器 可以试着运行代码 C 中的const 在C语言中 const修饰的量称为常变量 在编译过程中 const就是当成变量的编译生成指令的 不可以直接修改它的值 但是可以通过地址进行修改其对应的
  • springmvc 获取项目中的所有请求路径

    springboot springmvc 获取项目中的所有请求路径 1 编写业务代码 Autowired private WebApplicationContext applicationContext GetMapping getAllU
  • 关于vue2中$set及$delete的使用

    this set的使用 在平时使用vue进行开发的时候 我经常会遇到一个这样的问题 就是当data中包含声明且已赋值的对象或者数组 数组包对象 时 我们要向当前的这个对象中添加一个新的属性并且更新 结果发现并不会更新视图 只在控制台打印
  • Java读取操作大数据excel

    工作需要 读取大数据量的excel 用Apache poi的普通模式读取 会抛内存溢出 查询文档得知有另外一种模式 用户模式 该模式不会一下子整个文件load进来放在内存里 而是一行一行的读取 这样就能避免内存溢出了 上码 package
  • 数据库的数据类型

    数据库技术 1 创建数据表的语法规则 CREATE TABLE lt 表名 gt lt 列名 gt lt 数据类型 gt lt 列级完整性约束条件 gt lt 列名 gt lt 数据类型 gt lt 列级完整性约束条件 gt lt 表级完整
  • Yum安装MySQL8.0版本

    文章目录 Yum安装MySQL8 0版本 实验环境 一 配置yum源 1 先备份Centos Base repo 然后从阿里云下载centos7 repo 备份本地yum源 下载阿里云的yum源 2 安装之前的环境检查 查看是否已经安装My
  • 【构建ML驱动的应用程序】第 9 章 :选择部署选项

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • rs lidar速腾激光雷达使用方法之录包及离线播放

    目录 一 录包packet 1 修改雷达参数配置config 2 录包 二 播放包 1 修改雷达参数配置config 2 编译 运行驱动 3 播放包 一 录包packet 1 修改雷达参数配置config 可以直接录制点云消息 但这种方法会
  • Python文件操作和管理指南:打开、读取、写入和管理文件

    文章目录 文件 File 打开文件 使用 with as 语句打开文件 读取文件内容 读取大文件的方式 逐行读取和读取全部行 写文件操作 文件定位 seek tell 关闭文件 文件管理 获取目录结构 获取当前目录 切换当前所在目录 创建目
  • 安装Git后所需的配置

    文章目录 前言 一 Git的配置 二 idea连接github 1 在idea中进行git的配置 2 通过账号密码或私人令牌连接GitHub 前言 上周刚接触了git遇到一些问题 今天总结一下 一 Git的配置 1 第一次安装git需要配置
  • 想让你的某个文件不被删除不被移动不被重命名吗?很简单,see it!!!

    include
  • python爬取邮件内容_python简单爬虫,抓取邮箱

    最近 老师给了一个练习是 实现一个爬虫 就爬大概100个网页 匹配出邮箱 于是 我花了几天时间 熟悉熟悉了python 就有了下面这个超级简单的爬虫程序 各种毛病 这里先说明一下 python库的安装 因为我在这上面浪费了不少时间 首先是p
  • mongodb连接报错:connect@src/mongo/shell/mongo.js:374:17

    mongodb部署在云服务器上一直可以用 今天重启了一下 不知道为什么一直连接不上 就很慌 报的这个错误代码 去百度了半天也没找到一样的情况 直接我使用了net start mongodb 整个人都傻了 mongodb需要起服务的 起了以后
  • Android LocalBroadCastManager 使用总结

    1 概述 在Android中 BroadCast是一种广泛运用的在应用程序之间传输信息的机制 我们拿广播电台来打比方 我们平常使用收音机是这样的 许多不同的广播电台通过特定的频率来发送他们的内容 而我们用户只需要将频率调成和广播电台的一样就
  • Entity Framework Core系列教程-22-跟踪实体图(TrackGraph)

    Entity Framework Core中的ChangeTracker TrackGraph 在上一章中 您了解了不同的方法为Entity Framework Core 2中的实体图的每个实体设置不同的EntityState 在这里 您将