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

news/2024/9/29 3:45:27/

一、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.ppmy.cn/news/1531751.html

相关文章

MacOS Sequoia安装geant4.10.07

1&#xff0c;安装Geant4需求环境 (1,)安装xcode&#xff0c;在~/.bash_profile中添加其环境变量 export PATH"/Applications/CMake.app/Contents/bin":"$PATH" (2,)brew install clhep (3,)brew install cmake (4,)brew install qt5 (5,)brew insta…

mac-m1安装nvm,docker,miniconda

1.安装minicondaMAC OS(M1)安装配置miniconda_mac-mini m1 conda-CSDN博客 2.安装nvm&#xff08;用第二个方法&#xff09;Mac电脑安装nvm(node包版本管理工具)-CSDN博客 3.安装docker dmg下载链接docker-toolbox-mac-docker-for-mac安装包下载_开源镜像站-阿里云 教程MacOS系…

【学习笔记】Transformer架构探讨

Transformer 是一种彻底改变人工智能方法的神经网络架构。它首次在 2017 年的里程碑式论文 "Attention is All You Need"[1] 中被提出&#xff0c;并迅速成为深度学习模型的首选架构&#xff0c;为 OpenAI 的 GPT、Meta 的 Llama 和 Google 的 Gemini 等文本生成模型…

一个神级 Python 日志管理库:Loguru

大家好&#xff0c;在Python开发过程中&#xff0c;日志记录是不可或缺的一部分&#xff0c;它帮助开发者了解应用程序的运行状态和发现潜在错误。尽管Python自带的logging模块功能全面&#xff0c;但其配置复杂且不够直观。 这时&#xff0c;Loguru库以其简单易用和功能强大而…

如何把PDF样本册转换为网址链接

​随着互联网的普及&#xff0c;将纸质或PDF格式的样本册转化为网址链接&#xff0c;以便于在线浏览和分享&#xff0c;变得越来越重要。本文将为您详细讲解如何将PDF样本册转换为网址链接&#xff0c;让您轻松实现线上展示和分享。 一、了解PDF样本册与网址链接 1. PDF样本册…

无线感知会议系列【5】 无线感知边界-1

前言&#xff1a; 无线感知边界是整个ISAC 里面一个研究的难点和重点。 本篇主要来源于2022 《WiFi感知边界研究-Ubicomp2022论文分享》 感知的相关论文组会 2016年无线感知研究主要是国内高校主导,各种无线感知论坛 2021年无线感知 VIVO,OPPO &#xff0c;华为&#xff0c;国…

创建javaWeb项目(详细版本)2021年2月

1、新建一个java项目 2、点击工程名称&#xff0c;找到add framework support&#xff0c;并点击 建好如图 3、分别在工程目录下创建resourse文件夹和web目录下创建classes和lib文件夹 建好如图 4、file找到 project structure 5、选中resourse 将其mark as sources 6、路径改…

线性代数:探索矩阵与向量的奥秘

线性代数是一门研究线性方程组、向量、矩阵等内容的数学学科&#xff0c;在科学、工程、计算机科学等众多领域都有着广泛的应用。 文章目录 一、向量二、矩阵三、线性方程组四、行列式五、特征值与特征向量六、线性空间 一、向量 向量是线性代数中的基本概念之一。可以将向量…