自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(226)
  • 收藏
  • 关注

原创 EFCore_悲观锁与乐观锁(MySQL)

对并发可能导致的资源抢占问题持乐观态度,并不对资源实际上锁,而是在对资源进行更新时,对表中的并发令牌(单字段并发控制)或行版本字段(多字段并发控制)进行一致性检测(是否与开始读取该资源时一致),若一致则认为此时不存在资源抢占问题,进而更新数据(更新数据时会一同更新行版本字段)对字段执行更新前,会检测字段的当前值与读取数据时的值是否相等,若相等则认为不存在并发冲突,可以进行更新,否则认为存在并发冲突,抛出异常(DbUpdateConcurrencyException)悲观锁实际上是通过MySQL的。

2024-07-02 18:10:11 491

原创 EFCore_跟踪机制

然而实际上有时并不需要EFCore进行跟踪,例如仅查询数据时。此时跟踪行为就是纯粹的浪费内存。实例只要和EFCore产生关系,就会被EFCore跟踪(监视实例数据是否发生变化)

2024-07-02 15:14:09 156

原创 EFCore_查询过滤器(默认条件)

此后,所有查询命令均会默认添加过滤器。此时,该查询命令会忽略过滤器。

2024-07-02 14:28:03 138

原创 EFCore_原生SQL语句

该函数虽然参数类型为FormattableString,但实际上还是执行的ExecuteSqlRaw,只是参数从FormattableString参数中获取,所以还是。,所以没有异步版本(IQueryable为可执行的查询,实际上对应的SQL并未生成、执行,所以无法异步),因其根据FormattableString生成参数化SQL,而不是拼接SQL。以上函数均有异步版本,返回值类型为int,含义为受影响数据行数。,因其根据string生成拼接SQL。...... 以此类推。

2024-07-01 17:42:35 212

原创 EFCore_查询延迟执行机制及基于此的动态SQL拼接

若需要将数据一次性加载至内存,可以通过执行ToList()、ToArray()等方法,但通常不会出现该情况。的,通常是终结方法(遍历、ToList()、ToArray()、Max()、Min()、Count()等)。通过上述可知,IQueryable<>是"可执行的查询",但实际上并未生效,所以可以对其。对实体(DbSet)执行条件查询后,对应的SQL未必生成、执行,通常在执行了。,执行终结方法时,翻译的SQL语句会囊括所有查询条件。SQL才会真正地生成并执行。简而言之,若返回值类型。

2024-07-01 16:30:55 119

原创 EFCore_客户端评估与服务端评估

对实体(DbSet)执行Linq默认返回IQueryable,换言之默认执行的Linq是IQueryable类型下的Linq,该Linq采用的是服务端评估。若想进行客户端评估,可将实体转换为IEnumerable,此时执行的是IEnumerable类型下的Linq,该Linq采用的是客户端评估。先将代码翻译为SQL语句,再执行SQL语句对数据进行筛选,数据的筛选工作在。先将表的所有数据读取至内存,再在内存中对数据进行筛选,数据的筛选工作在。

2024-07-01 15:50:10 199

原创 EFCore_一对一、一对多、多对多

关系配置在任意一端均可,实体对应的表中不存储外键(无需,也无法调用HasForeignKey()),外键存储在额外生成的中间表中,可通过UsingEntity("xxx")或UsingEntity(t=>t.ToTable("xxx"))来指定中间表名。以"教师"实体为例,其对应表为"Teacher"。答:通常单向导航属性出现在一对一 / 一对多的情况下(多对多的情况下外键储存在中间表),所以将关系配置在单向导航属性所在的实体类的配置类中,并将WithOne() / WithMany()置空即可。

2024-05-31 15:49:26 267

原创 EFCore_增删改查

3-ExecuteXxx()函数执行批量操作时,是实际上的批量操作。此外,区别于XxxRange(),无需将数据加载至内存(无查询操作,仅生成一条SQL)2-XxxRange()函数实际上是单个操作的循环,并不是真正意义上的批量操作。函数将实例更新至DB(实例可以是通过查询获得的,也可以是新建的)实现(第一个参数为被修改的表字段,第二个参数为修改值)方式:先查询(通过对DbSet执行Linq),再修改。EFCore7.0+时,删除(单个或批量)可通过。EFCore7.0+时,修改(单个或批量)可通过。

2024-05-20 15:54:37 316

原创 EFCore_获取C#代码的SQL命令

1. 添加依赖:Microsoft.Extensions.Logging.Console(此处以输出至控制台为例)在...DbContext.cs中的OnConfiguring()函数中添加对SimpleLog的应用。3. 在...DbContext.cs中的OnConfiguring()函数中添加对日志工厂的应用。注:message即为日志信息,其包括但不限于SQL信息。2. 在...DbContext.cs中创建日志工厂。注:该方式仅可获取查询语句的SQL。

2024-05-20 15:41:47 225

原创 EFCore_创建项目

配置类实现IEntityTypeConfiguration<>接口,可在其中对表进行详细设置,常用可设置项详见代码注释(若不创建实体类配置类,则会采用默认配置,详见本节文末)添加该依赖时可不添加Microsoft.EntityFrameworkCore,该依赖会捆绑添加。Oracle官方也提供MySQL依赖,但是跟新速度极慢。add-migration xxx(此次migration的代号)3.默认将"Id"或"实体类名+Id"属性对应的表字段设置为主键。1.默认将实体类属性名作为表字段名。

2024-05-14 16:56:21 314

原创 EFCore_Migration常用命令

script-migration 代号X 代号Y 生成从代号X版本至代号Y版本的SQL代码(代码未执行)add-migration 代号(此次Migration的代号) 添加迁移。remove-migration 移除最近的迁移文件(需要该文件未被执行)update-database 代号 迁移至代号版本(迁移文件不变)script-migration 生成迁移的SQL代码(代码未执行)update-database 执行最新迁移文件的Up函数。

2024-05-14 16:54:10 155

原创 Blender小记

若 材质 连接"系数"而非"A/B", 则可通过调节"A/B"颜色令材质纹理颜色发生变化, 而不是整个材质发生变化. 对于纹理而言, "A"对应黑色纹理区域, "B"对应白色纹理区域, 换言之调节"A"颜色令色深区域变色, 调节"B"颜色令色浅区域变色。关于混合"系数", 涉及到纹理本身颜色. 若纹理为黑白, 则"A/B"向可视为对深/浅色区的定向颜色调整. 若纹理不为黑白, 则"A/B"向会对深/浅色区同时进行影响, 只是影响程度不同("A"向对深色区影响大, "B"向对浅色区影响大)

2024-05-14 13:20:42 425

原创 .NET_NLog

摘要

2024-05-08 14:56:18 409

原创 .NET_控制反转简述

注册完成服务后,通过服务定位器获取服务时,框架会创建服务实例,并一同创建服务在构造函数中赋值的服务(依赖项),称为依赖注入(此时"创建"动作由框架完成,不由调用者完成,所以属于"控制反转",也就是说依赖注入是控制反转的一种实现方式),且该服务所依赖的服务所依赖的服务......均会被创建并注入。GetService()返回服务/GetServices()返回所有服务(无则返回null), GetRequiredService()返回服务(无则抛异常)瞬时(获取服务时创建新对象)获取依赖注入的根节点)

2024-05-07 16:36:42 403

原创 C#_LINQ简记

返回根据条件分组的数据(一维IEnumerable,二维IGrouping,但IGrouping实现IEnumerable),用于标识分组(IGrouping)的Key属性即为分组条件。返回首条满足条件的数据(无数据或无符合条件数据时返回该数据类型的默认值)判断是否存在满足条件的数据(.Any()可用于判断队列是否为空)返回单条数据(无数据时返回该数据类型的默认值,数据重复时报错)返回首条满足条件的数据(无数据或无符合数据时报错)返回单条数据(无数据或数据重复时报错)返回对数据正序排序的结果。

2024-05-07 13:39:41 297

原创 C#_扩展方法

C#_扩展方法

2024-02-22 11:33:34 597

原创 C#_事件简述

事件基于委托,但不等同于委托。

2024-02-22 10:19:12 678

原创 C#_WaitAll、WhenAll、async及await

Task.WhenAll 在任何一个任务出现异常时都会立即返回一个代表异常的 Task 对象,而不会等待其他任务完成。await 关键字只能在返回类型为 Task、Task 、 ValueTask 的函数中使用,或在无返回值函数中使用(void)。Task.WhenAll 和 Task.WaitAll 都是用于等待多个任务完成的方法,但它们之间有一些重要的区别。Task.WaitAll: 没有返回值。Task.WhenAll: 返回一个 Task 对象,该对象表示所有输入任务的联合任务。

2024-02-21 18:11:18 1259

原创 C#_各式各样的参数(引用参数、输出参数、数组参数、具名参数、可选参数)

换言之,值类型参数的参数与实体之间无直接关联,修改参数不会对实体产生影响;引用类型参数的参数与实体可视为同一参数,修改参数会将修改同步至实体。注:当函数并不修改参数引用,而只是修改被引用的对象时,值参数引用类型与引用参数引用类型在使用上并无区别,只是机制不同。值参数和引用参数的区别在于传参时是否会创建参数副本:值参数不会创建副本,而引用参数会创建副本。通过具名参数传参,无需提前声明变量(具名参数依据参数名与形参匹配,而不是次序)设置可选参数后,参数具有默认值,可选择不传参;设置数组参数后,函数可接收。

2024-02-21 16:30:50 533

原创 C#_索引器

C#_索引器

2024-02-21 15:25:22 493

原创 C#_值类型与引用类型 及 值参数与引用参数

换言之,值类型参数的实参与形参之间无直接关联,修改形参不会对实参产生影响;引用类型参数的实参与形参可视为同一参数,修改形参会将修改同步至实参。对于局部变量而言,可得相对于帧指针所指地址的地址偏移量(关于栈指针和帧指针:栈指针指向栈的顶部,帧指针指向该函数对应的帧的底部)对于引用类型而言,依地址偏移量找到的数据为实际数据在堆中的地址。注:当函数并不修改参数引用,而只是修改被引用的对象,则。对于成员变量而言,可得相对于所属对象地址的地址偏移量。对于值类型而言,依地址偏移量找到的数据即为实际数据。

2024-02-20 17:24:38 515

原创 C#_字段 属性 常量与只读

简单来说就是有Get/Set函数的字段,其字段修饰符为private,通过属性(的Get/Set函数)向外部暴露数据。隶属于类型,具有只读性质,且在声明时就必须赋初值(若需要隶属于对象的"常量" 可以选择只读实例字段)只读字段: 声明时添加readonly关键字,只能在声明时或构造函数中赋初值。在代码执行中 常量的标识符会被替换为实际值,较之字段和属性效率更高。与该类型关联(为该类型的特征,可直接调用,无需具体至对象)只读属性: 只提供get函数,不提供set函数。中(定义在函数等代码体中的变量称为。

2024-02-20 15:49:07 501

原创 ASP.NET Core WebAPI_Controller简述

ASP.NET Core WebAPI_Controller简述

2024-02-01 17:26:12 375

原创 ASP.NET Core WebAPI_解决跨域问题(前端后端)

此时,请求实际上被代理为https://localhost:xxxx/api/login/verify,不会触发跨域问题。在项目的根目录找到Program.cs文件,我的前端框架为Vue3。前后端跨域选其一即可。

2024-02-01 17:21:15 1675

原创 WPF_初步认识TypeConverter

WPF对象的属性通常为String类型,但并不总是。类型不符时对其进行String赋值显然是不行的,但是可以通过类型转换类将String转换为对应类型后再进行赋值。上述代码中,"LittleTom"将作为参数value被传入ConvertFrom函数,ConvertFrom函数的返回值将被赋值给Child属性。3.为被赋值类(通过TypeConverterAttribute特征类)标注特征。1.类型转换类继承TypeConverter类。2.重写ConvertFrom函数。

2023-06-29 11:27:00 479

原创 WPF_MVVM简述

View层的前端代码中,Button通过 Command="{Binding 命令属性}" 形式与后端的命令属性绑定,TextBox、TextBlock、Slider等通过 Text="{Binding 数据属性}" 形式与数据属性绑定。RaisePropertyChanged函数被调用时触发PropertyChanged事件,事件会将新的属性数据与原先的属性数据进行比对,若数据确实发生变化,则将新的数据传递至界面。View层的后端代码中,需要指定前端的DataContext,即ViewModel。

2023-06-08 16:31:26 888

原创 C#_宏定义

宏定义常用于版本控制,例如在X环境下使用A代码,在Y环境下使用B代码示例代码#if!VERSION_3#else#endif#else#endif运行效果。

2023-05-06 15:48:00 2862 1

原创 C#_委托简述

委托的添加与移除通过"+="与"-="实现,委托对象被多重委托时,执行委托将一次性执行所有委托。通过泛型指定返回值类型,另外,也可通过泛型指定参数类型,Action可通过泛型指定参数类型,当然,还可使用lambda表达式。Action类为C#提供的。此时可将返回值类型为。Func类为C#提供的。

2023-05-06 15:32:25 804

原创 C#_容器

存储元素:K-V键值对;限制:Key不可为null、不可重复,Value无限制。修改元素:添加元素-Enqueue;移除元素-Dequeue。修改元素:添加元素-Add系列;移除元素-Remove系列。修改元素:添加元素-Add系列;移除元素-Remove系列。修改元素:添加元素-Add系列;移除元素-Remove系列。注:元素的连接方式为头插,即存入顺序与读取顺序相反。修改元素:添加元素-Push;容器特性:移除元素时遵循先进先出。容器特性:移除元素时遵循后进先出。

2023-05-06 14:51:00 399

原创 C#_Struct与Class的差异

若struct具有已初始化的字段,则必须显式声明构造函数(即使是空函数),而class不需要。class至多可继承一个class,无法继承struct,也可实现数个interface,struct默认继承于Object类,class若无显式基类,也继承于Object类。struct储存于栈,class储存于堆(class于栈中储存引用)struct属于值传递,在函数内对参数进行修改,不会修改struct。class处于引用传递,在函数内对参数进行修改,会修改class。

2023-05-04 23:06:01 631

原创 C#_Enum

C#_Enum

2023-05-04 21:14:57 163

原创 编译型语言与解释型语言详解_Java什么是编译与解释共存的语言

换句话说,只要平台安装了对应的解释器,就可以直接运行源码,不同的平台上运行同一段源码,得到的结果是相同的。其实,通常我们都说C语言是编译型语言,但其实C语言的解释器也是存在的,例如Ch,所以C语言所谓的"编译型语言",只是指其主流实现方式为编译,并不代表其不能进行解释;解释型语言可直接运行源码,在运行源码时,解释器逐行将源码翻译为机器码,但不生成可执行文件,也就是说再次运行源码时需要再次进行解释,所以解释型语言无法脱离开发环境运行,而且运行效率低于编译型语言,甚至存在数量级的差距。"一次编译,无限运行"

2023-01-07 02:10:01 1767

原创 Nginx的安装与负载均衡、动静分离的初步使用(Windows)

Nginx的作用: 反向代理正反向代理是什么? 正向代理:代客户端访问服务端 反向代理:代服务端接收客户端的访问正反向代理示例: 正向代理:客户端A1、客户端A2...----->正向代理服务器------>服务端 反向代理:客户端----->反向代理服务器----->服务器A1、服务器A2...Nginx反向代理的经典应用:负载均衡、动静分离1.下载Nginx压缩包(稳定版)nginx: download 2. 解压Nginx压缩包3.在Nginx

2022-12-06 22:40:19 619

原创 RabbitMQ_消息确认机制

消息发送确认机制:消息由producer发送后,确认其是否到达broker,又是否被exchange转发至对应queue的机制该机制分为两部分:producer---broker,exchange---queue前者的实现依靠ConfirmCallback机制,后者的实现依靠ReturrnsCallback机制实现ConfirmCallback接口,并重写confirm方法confirm方法参数含义:correlationData:CorrelationData类只有一个 id 属性 用于唯一标识该消息

2022-12-05 15:06:36 886

原创 RabbitMQ_消息的TTL与死信队列

TTL = time to live,消息的TTL = 消息的过期时间当队列中的消息过期、被拒绝、溢出(消息队列达到最大长度)后,若未设置死信队列,则该消息将被抛弃,反之则转入死信队列配置类死信队列仅需配置类,其与消息队列的绑定在消息队列的配置类中完成消息的TTL分为消息队列的TTL与消息本身的TTL消息队列的TTL:被转发至该队列中的所有消息均遵循该队列的TTL规则消息本身的TTL:消息遵循本身携带的TTL规则,不影响所处队列中的其他消息问:若同时存在消息队列的TTL与消息本身的TTL,优先级如

2022-12-02 16:41:43 843

原创 RabbitMQ_五种模式(整合SpringBoot)

若先启动生产者端发送消息,再启动消费者端接收消息,则最先连接到RabbitMQ服务器的消费者将接收所有的消息,所以通常而言需要先启动消费者端;而先启动消费者端时,若将配置类置于生产者端,则可能会出现消费者端中使用,但尚未被配置到RabbitMQ的配置(若配置类在生产者端的话),所以将配置类置于消费者端更有利于测试代码,另外,在项目启动时就进行配置显然是很好的选择。将消息队列与交换机进行绑定,当有生产者向交换机投递消息时,交换机将会把消息转发至所有与其绑定的消息队列。x.number.y 将匹配队列1 2。

2022-11-30 17:44:20 1411

原创 RabbitMQ_Java

未整合SpringBoot的原生Java与RabbitMQ

2022-11-23 15:40:21 587

原创 RabbitMQ_概述

虚拟地址间的环境相互独立(一个虚拟地址下不允许有同名Exchange,但不限制其余虚拟地址下有同名Exchange)Routing Key:路由规则,交换机用于标识并分类消息队列的工具(根据消息携带的Routing Key,将该消息分发至处于该Routing Key下的消息队列)Channel:信道,进行消息读写的通道,RabbitMQ的绝大部分操作在信道完成;Exchange:交换机,消息系统中枢,将从生产者处收集的消息分发至对应消息队列。Queue:消息队列,用于存储生产者传递的消息。

2022-11-19 23:11:32 520

原创 RabbitMQ_交换机

交换机在RabbitMQ中扮演消息系统中枢,将从处收集的消息转发至处,等待消费者消费消息队列被绑定至交换机,交换机根据routing key标识并分类消息队列

2022-11-19 22:42:39 826

原创 RabbitMQ_用户 与 角色 与 权限

RabbitMQ_用户 与 角色 与 权限

2022-11-13 15:26:21 436

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除