当前位置: 首页 > 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()类似,也需要将查询设置为不能跟踪。
在这里插入图片描述

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

相关文章:

  • 论文阅读 | HiDDeN网络架构
  • 一次 Spring 扫描 @Component 注解修饰的类坑
  • 什么是数据挖掘?初学者指南
  • 基于python+django+vue的电影数据分析及可视化系统
  • 瓶子类型检测系统源码分享
  • 第十四届蓝桥杯真题Java c组A.求和(持续更新)
  • unity CustomEditor的基本使用
  • 基于php的助农生鲜销售系统
  • Transformers 引擎,vLLM 引擎,Llama.cpp 引擎,SGLang 引擎,MLX 引擎
  • 选择租用徐州服务器机柜的作用有哪些?
  • 大模型辅助需求代码开发:如何提升核心编码任务生成效果
  • C语言编译器(C语言编程软件)完全攻略(包含所有平台)
  • 【分布式微服务云原生】详细介绍下dubbo和springcloud所能支持的微服务特性,为啥能支持的技术原理,以及适用的业务场景,并对两者各方面做个详细的比较
  • Linux基础命令mkdir详解
  • 在CentOS 6上安装BIND DNS服务器的方法
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Centos6.8 使用rpm安装mysql5.7
  • CSS 提示工具(Tooltip)
  • FineReport中如何实现自动滚屏效果
  • JavaScript HTML DOM
  • JavaScript设计模式之工厂模式
  • Mithril.js 入门介绍
  • MobX
  • Python3爬取英雄联盟英雄皮肤大图
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 浮动相关
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 码农张的Bug人生 - 初来乍到
  • 首页查询功能的一次实现过程
  • 树莓派 - 使用须知
  • 通信类
  • 在Unity中实现一个简单的消息管理器
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • Mac 上flink的安装与启动
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #1014 : Trie树
  • #if 1...#endif
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $forceUpdate()函数
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (十三)Flask之特殊装饰器详解
  • (算法二)滑动窗口
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (杂交版)植物大战僵尸
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .htaccess 强制https 单独排除某个目录
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net framework 4.0中如何 输出 form 的name属性。