当前位置: 首页 > news >正文

ASP.NET Core8.0学习笔记(十九)——EF Core DbSet

一、DbSet概述

1.DbSet提供了通过DbContext对表进行查询操作的路径。DbSet对应的属性名称将默认映射为实体T的表名。
2.使用DbSet<T>进行查询的方法:
(1)直接在DbContext中创建对应的DbSet<T>属性
(2)使用DbSet DbContext.Set<T>方法操作数据表。
3.在DbSet<T>中对于数据对象进行的任何操作,都将保存在内存中,只有当SaveChanges()方法被调用时,才会将数据变化提交给数据库。

二、使用DbSet对数据库进行查询

1.在DbContext中没有对应DbSet字段的情况下,使用Set<T>方法对表进行操作:
在这里插入图片描述

运行:
在这里插入图片描述

三、使用DbSet进行数据更新

1.在EF Core7.0版本以前,要对数据进行更新,我们需要首先把数据查询出来,然后再进行修改。在EF Core7.0以后,可以调用DbSet<T>对象的ExecuteUpdate()方法基于查询结果对数据进行修改。
在这里插入图片描述

运行:
在这里插入图片描述

我们发现该方法似乎并不起作用。原因是什么?见2
2.ExecuteUpdate()的注意事项:
(1)不同于EF Core一般的数据修改方法:先找数据,重新赋值、删除再调用SaveChanges(),调用ExecuteUpdate()方法将会把修改直接提交到数据库而不会去修改实体的状态,DbContext也无法监测到实体状态的改变。也就是说,上面的代码等价于:
在这里插入图片描述

不过,按理来说即使直接提交到数据库,再次执行db.Set<T>.ToList()也会重新从数据库中查询。 但是,EF Core中具有缓存机制,它缓存了我们第一次查询的结果而没有真的再次去查询数据库。
要想解决这个问题,有两种解决方案:
第一,可以重新创建一个数据库上下文:
在这里插入图片描述

运行:
在这里插入图片描述

第二,为了避免查询结果被缓存,直接让EF Core无法跟踪这个查询就好了,使用AsNoTracking()方法将当前的查询设置为不能追踪:
在这里插入图片描述

运行:
在这里插入图片描述

注意:即使authors1所属查询可以被跟踪,即不调用AsNoTracking()方法,运行结果也是正确的,经过测试,两个查询只要有一个不可被跟踪,即可保证运行结果正确。
3.一次性更新对象的多个属性:SetProperty()方法支持链式调用,可以使用多个SetProperty()方法一次性更新多个属性。
在这里插入图片描述

运行:
在这里插入图片描述

四、使用DbSet删除数据

1.在EF Core 7.0以前,要想删除数据,必须先把数据查询出来然后才能删除,在EF Core 7.0及后续版本中,可以使用ExecuteDelete()方法删除数据。注意,与ExecuteUpdate()类似,也需要将查询设置为不能跟踪。
在这里插入图片描述

运行:
在这里插入图片描述

http://www.lryc.cn/news/448852.html

相关文章:

  • Android Camera 预览角度和拍照保存图片角度相关
  • 新手如何使用Qt——方法使用
  • 友元运算符重载函数
  • 从0开始实现es6 promise类
  • XML 编码
  • AI周报(9.22-9.28)
  • 基于RealSense D435相机实现手部姿态重定向
  • js中防抖 debounce 节流 throttle 原理 从0手动实现
  • AIGC: 10 AI转文服务器的搭建过程记录
  • 性能测试1初步使用Jmeter
  • OpenGL ES 绘制一个三角形(2)
  • QT----Creater14.0,qt5.15无法启动调试,Launching GDB Debugger报红
  • 初试React前端框架
  • 华为OD机试真题---手机App防沉迷系统
  • 物流货运托运发货单二联三联打印软件定制 佳易王物流单管理系统操作教程
  • 代码随想录算法训练营| 找树左下角的值 、 路径总和 、 从中序与后序遍历序列构造二叉树
  • 【开源免费】基于SpringBoot+Vue.JS服装销售平台(JAVA毕业设计)
  • 人工智能与自然语言处理发展史
  • 0基础跟德姆(dom)一起学AI 机器学习01-机器学习概述
  • yakit使用教程(一,下载并进行基础配置)
  • 计算机毕业设计电影票购买网站 在线选票选座 场次订票统计 新闻留言搜索/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
  • DES、3DES 算法及其应用与安全性分析
  • TypeScript介绍和安装
  • NetworkPolicy访问控制
  • C++面向对象基础
  • 遥感图像变换检测实践上手(TensorRT+UNet)
  • Transformers 引擎,vLLM 引擎,Llama.cpp 引擎,SGLang 引擎,MLX 引擎
  • 牛顿迭代法求解x 的平方根
  • 端口隔离配置的实验
  • 洛谷 P10456 The Pilots Brothers‘ refrigerator