【Entity Framework】EF中DbSet类详解

【Entity Framework】EF中DbSet类详解

文章目录

  • 【Entity Framework】EF中DbSet类详解
    • 一、概述
    • 二、定义DbSet
      • 2.1 具有DbSet属性的DbContext
      • 2.2 具有 IDbSet 属性的 DbContext
    • 2.3 具有 IDbSet 属性的 DbContext
    • 三、DbSet属性
    • 四、DbSet方法
    • 五、DbContext动态生成DbSet

在这里插入图片描述

一、概述

DbSet可用于查询和保存的TEntity实例。针对的DbSet LINQ查询将转换为针对数据库的查询。

可能不会反映上下文中尚未保存到数据库的更改。如:结果将不包含新添加的实体,并且可能扔包含标记为要删除的实体。

根据所使用的数据库,针对DbSet的LINQ查询的某些部分可能在内存中求值,而不是转换为数据库查询。DbSet对象通常从DbSet派生DbContext的或方法Set()上的属性获取。

Entity Framework Core不支持在同一DbContext实例上运行多个并行操作。这包含异步查询的并行执行以及从多个线程进行的任何显示并发使用。

二、定义DbSet

使用Code First工作流进行开发时,可定义一个派生DbContext,用于表示与数据库的会话,并为模型中的每个类型公开一个DbSet。

2.1 具有DbSet属性的DbContext

Code First 示例中所示的常见情况是拥有一个具有公共自动 DbSet 属性的 DbContext,用于模型的实体类型。 例如:

public class BloggingContext : DbContext
{public DbSet<Blog> Blogs { get; set; }public DbSet<Post> Posts { get; set; }
}

当在 Code First 模式下使用时,这会将 Blogs 和 Posts 配置为实体类型,并配置可从此访问的其他类型。 此外,DbContext 会自动调用这些属性的资源库来设置相应的 DbSet 的实例。

2.2 具有 IDbSet 属性的 DbContext

在某些情况下,例如创建 mocks 或 fakes 时,使用接口来声明 set 属性会更有用。 在这种情况下,可以使用 IDbSet 接口代替 DbSet。 例如:

public class BloggingContext : DbContext
{public IDbSet<Blog> Blogs { get; set; }public IDbSet<Post> Posts { get; set; }
}

此上下文的工作方式与使用 DbSet 类作为其 set 属性的上下文完全相同。

2.3 具有 IDbSet 属性的 DbContext

如果你不希望为 DbSet 或 IDbSet 属性公开公共资源库,则可以改为创建只读属性并自行创建 set 实例。 例如:

public class BloggingContext : DbContext
{public DbSet<Blog> Blogs{get { return Set<Blog>(); }}public DbSet<Post> Posts{get { return Set<Post>(); }}
}

请注意,DbContext 将缓存从 Set 方法返回的 DbSet 的实例,使每个属性在每次调用时都返回相同的实例。Code First 实体类型的发现工作方式与具有公共 Getter 和资源库的属性的工作方式相同。

三、DbSet属性

序号属性名说明
1EntityType与此IEnitityType集关联的元数据
2Local获取一个,LocalView它表示此集中所有“已添加”、“未更改”和“修改”实体的本地视图。

四、DbSet方法

序号方法名说明
1Add将给定实体以“已添加”状态添加到集的基础上下文中,这样一来,当调用 SaveChanges 时,会将该实体插入到数据库中
2AddAsync将给定实体集合添加到基础化集的上下文中(每个实体都置于“已添加”状态),这样当调用 SaveChanges 时,会将它插入到数据库中
3AsNoTracking返回一个新查询,其中返回的实体将不会在 DbContext 中进行缓存. (继承自 DbQuery)
4Attach将给定实体附加到集的基础上下文中. 也就是说,将实体以“未更改”的状态放置到上下文中,就好像从数据库读取了该实体一样
5Create为此集的类型创建新的实体实例. 请注意此实例不会添加或附加到此集. 如果基础上下文配置为创建代理且实体类型满足创建代理的要求,则返回的实例将是一个代理
6Equals确定指定的 DbSet 是否等于当前 DbSet. (重写 DbQuery.Equals(Object).)
7Find查找带给定主键值的实体. 如果上下文中存在带给定主键值的实体,则立即返回该实体,而不会向存储区发送请求. 否则,会向存储区发送查找带给定主键值的实体的请求,如果找到该实体,则将其附加到上下文并返回.如果未在上下文或存储区中找到实体,则返回 null
8FindAsync异步查找带给定主键值的实体. 如果上下文中存在带给定主键值的实体,则立即返回该实体,而不会向存储区发送请求. 否则,会向存储区发送查找带给定主键值的实体的请求,如果找到该实体,则将其附加到上下文并返回. 如果未在上下文或存储区中找到实体,则返回 null
9Include指定要包括在查询结果中的相关对象. (继承自 DbQuery)
10Remove将给定实体标记为“已删除”,这样一来,当调用 SaveChanges 时,将从数据库中删除该实体. 请注意,在调用此方法之前,该实体必须以另一种状态存在于该上下文中
11RemoveRange从基础化集的上下文中删除给定实体集合(每个实体都置于“已删除”状态),这样当调用 SaveChanges 时,会从数据库中删除它
12SqlQuery创建一个原始 SQL 查询,该查询将返回此集中的实体. 默认情况下,上下文会跟踪返回的实体;可通过对返回的 DbSqlQuery

五、DbContext动态生成DbSet

平时我们在使用EF的过程中,都是有DbContext中每一个表加一个DbSet,如果我们一个项目有上千个表,就得加上千个DbSet,是很麻烦的一个工程,现在采用一个简单的方法处理,在DbContext类的OnConfiguring方法中加上如下代码:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{var assembly = Assembly.GetExecutingAssembly();foreach (Type type in assembly.ExportedTypes){if (type.IsClass && type != typeof(EntityBase) && typeof(EntityBase).IsAssignableFrom(type)){var method = modelBuilder.GetType().GetMethods().Where(x => x.Name == "Entity").FirstOrDefault();if (method != null){method = method.MakeGenericMethod(new Type[] { type });method.Invoke(modelBuilder, null);}}}base.OnModelCreating(modelBuilder);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/295025.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端基础篇- 社区 IDEA 手动 Maven 创建 SpringBoot 项目、Maven 安装与配置环境变量、IDEA 集成 Maven

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Maven 安装与配置环境变量 1.1 下载并解压安装包 1.2 配置本地仓库 1.3 配置阿里云私服 1.4 配置环境变量 2.0 IDEA 集成 Maven 2.1 首先创建一个新项目 2.2 开始…

二维相位解包理论算法和软件【全文翻译-二维相位解缠的离散形式 (2.5)】

我们已经指出,二维相位解包相当于在覆盖相关领域的路径上对相位梯度进行积分。在实践中,我们当然必须处理采样数据。然而,为了做到这一点,我们必须定义离散域中的二维相位解包问题,并明确本书中将会用到的相关术语。 从最一般、限制最少的意义上讲,二维相位解包是一个不…

121314饿

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

vue3鼠标向下滑动,导航条改变背景颜色和logo的封装

代码中使用了element-plus组件&#xff0c;需先安装 向下滑动前 向下滑动后&#xff08;改变了logo 字体 背景颜色&#xff09; <script lang"ts" setup> import router from /router; import { ArrowDown } from element-plus/icons-vue import { ref, …

实测梳理一下kafka分区分组的作用

清空topickafka-topics.sh --bootstrap-server localhost:9092 --delete --topic second创建分区kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic second发kafka-console-producer.sh --bootstrap-server localhos…

有关链表算法

例题一 解法&#xff08;模拟&#xff09;&#xff1a; 算法思路&#xff1a; 两个链表都是逆序存储数字的&#xff0c;即两个链表的个位数、⼗位数等都已经对应&#xff0c;可以直接相加。 在相加过程中&#xff0c;我们要注意是否产⽣进位&#xff0c;产⽣进位时需要将进位…

Visual Studio 2022报错c1083,win11解决办法

如果头文件报错&#xff0c;并且编译器报错是c1083&#xff0c;无法处理的时候&#xff0c;包括卸载重装也是无济于事的时候 此时可以采取一下办法进行修改 出现这个的主要原因是安装 Windows SDK 时版本出错&#xff0c;需要根据自己的 windows 版本选择安装对应版本的 Wind…

网心云邀请码:KpyV3Dk7

网心云长期有效邀请码&#xff1a;KpyV3Dk7 新用户注册福利码&#xff1a;KpyV3Dk7 通过福利码注册并登录您可获得&#xff1a;①可得1元收益②1张14天50%加成卡③绑定设备可得1~5元不等 新手解答&#xff1a; 1. 有哪些设备可以安装&#xff1f;闲置电脑、闲置手机、闲置平…

就业班 第二阶段 2401--3.29 day9 shell之正则+数组

九、shell 编程-数组 普通数组:只能用整数作为数组的索引 关联数组:可以使用字符串作为数组的索引 数组定义 普通数组定义: [rootnewrain shell]# books( linux shell awk sed ) 引用: [rootnewrain shell]# echo ${books[0]} linux [rootnewrain shell]# echo ${books[1]…

Kafka入门到实战-第四弹

Kafka入门到实战 Kafka集群搭建官网地址Kafka概述使用Kraft搭建Kafka集群更新计划 Kafka集群搭建 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件…

数据库:Redis数据库

一、非关系型数据库 1.什么是非关系型数据库 非关系型数据库&#xff08;Non-relational Database&#xff09;又称NoSQL数据库是一种不同于传统关系型数据库管理系统&#xff08;RDBMS&#xff09;的数据存储解决方案。NoSQL这个术语最初意味着"Not Only SQL"&…

NoSQL(非关系型数据库)之Redis的简介与安装

一、简介 1.1 关系型数据库与非关系型数据库 1.1.1 概念 1.1.2 区别 1.2 非关系型数据库产生背景 1.3 redis 简介 1.4 redis 优点 1.5 redis 快的原因 二、安装 2.1 关闭核心防护 2.2 安装相关依赖 2.3 解压软件包并进行编译安装 2.4 设置 Redis 服务所需相关配置文…

代码随想录第28天 | 93.复原IP地址 、 78.子集 、 90.子集II

一、前言&#xff1a; 参考文献&#xff1a;代码随想录 今天的主题内容是回溯算法&#xff0c;这一章的干货很多&#xff0c;我需要慢慢的品味&#xff0c;不单单只是表象&#xff0c;还需要研究深层原理。 二、复原IP地址 1、思路&#xff1a; &#xff08;1&#xff09;…

HarmonyOS 应用开发之同步任务开发指导 (TaskPool和Worker)

同步任务是指在多个线程之间协调执行的任务&#xff0c;其目的是确保多个任务按照一定的顺序和规则执行&#xff0c;例如使用锁来防止数据竞争。 同步任务的实现需要考虑多个线程之间的协作和同步&#xff0c;以确保数据的正确性和程序的正确执行。 由于TaskPool偏向于单个独…

晚间兼职攻略:六个副业轻松上手

晚上兼职副业&#xff0c;作为增加额外收入的途径&#xff0c;选择多样且灵活。以下是六个特别适合晚上进行的副业&#xff0c;让你在闲暇时光也能充实自我&#xff0c;获得收益。 1&#xff0c;网络调查与市场研究是一个值得考虑的选项。你可以在晚上抽出空闲时间&#xff0c…

DEM高程数字模型制作技术分享

1. 引言 ​数字高程模型&#xff08;Digital Elevation Model&#xff0c;简称DEM&#xff09;是地形表面地形特征的数字表示。它提供了关于地面起伏、地形形态、地表特征等重要信息。在地理信息系统&#xff08;GIS&#xff09;、遥感、地质学、水利工程等领域&#xff0c;DEM…

群晖NAS使用Docker部署大语言模型Llama 2结合内网穿透实现公网访问本地GPT聊天服务

文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛&#xff0c;包括聊天机…

《信息技术服务 智能运维 第2部分:数据治理》国家标准2024年第一次线下编写会议成功召开

2024年3月13日~15日&#xff0c;由运维数据治理国标编制组主办的运维数据治理国家标准2024年第一次编写工作会议在上海成功召开。 本次会议由云智慧&#xff08;北京&#xff09;科技有限公司承办&#xff0c;来自南网数字集团信通公司、太保科技、平安银行、广发银行、广东农…

【电源专题】电池不均衡的影响与原因

在使用多节电池设计产品时,大家都知道如果多节电池不均衡会影响电池寿命与充电安全。特别是在充电末端与放电末端时表现较为明显。 电池不均衡的影响 那么为什么会影响安全与寿命呢?其原因如下: 如果电池不均衡时,相当于木桶的短板效应。一方面没法充满,充电时电压高的那一…

透明天气超实用工具更便捷地查看本地天气情况!

确切的气象数据播报&#xff0c;支持分钟级的降雨预测&#xff0c;精选的数百万张美丽城市背景图片和精美的风景图片&#xff0c;满足您与数百万朋友分享美丽天气的需求&#xff0c;用户友好的设计&#xff0c;简洁的界面布局&#xff0c;轻松查询天气信息的同时&#xff0c;还…