自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Quartz_将持久化配置写在appsettings.json中

此处仅作示例,依据实际情况进行修改需要说明的是,详细配置不可写成对象的形式,必需以XXX.YYY.ZZZ的形式书写。

2024-09-12 13:12:47 357

原创 Quartz.Net_侦听触发器

1.实现ITriggerListener接口,并实现其函数,具体说明见代码注释。触发器执行任务时存在数个阶段,利用侦听器可以在对应的阶段执行一些代码。2.为调度器添加侦听器。

2024-09-02 17:33:58 513

原创 Quartz.Net_持久化

答:因为我本人平时是使用Pomelo.EntityFrameworkCore.MySql连接DB的,但Quartz.Net硬编码使用MySql.Data连接DB。通常而言,Quartz.Net的数据默认是存储在运存中的,换言之:断电即失。所以在默认情况下,当系统重启后,原先的所有任务、触发器、调度器都会失效。问:为什么需要同时安装MySql.Data与Pomelo.EntityFrameworkCore.MySql?为避免上述情况的发生,可以对Quartz.Net进行持久化设置,令数据储存在DB中。

2024-09-02 17:11:01 462

原创 Quartz.Net_错过策略

假设一个任务需要重复执行五次,执行的时间点分别为 00:10、00:20、00:30、00:40 和 00:50。现在错过了第二次(00:20)和第三次(00:30)的执行,在 00:35 重新启动了服务。CronTrigger.MisfireInstruction.FireOnceNow:立即执行一次,然后根据原计划的 cron 表达式继续执行。总次数 = 原总次数 - 错过的次数 + 1(立即执行的一次)后续执行次数 = 原总次数 - 已执行次数 - 错过次数。立即执行一次,然后根据。

2024-09-02 16:09:04 329

原创 Quartz.Net_依赖注入

有时会遇到需要在IJob实现类中依赖注入其他类或接口的情况,但Quartz的默认JobFactory并不能识别具有。1.安装依赖:Quartz、Microsoft.Extensions.DependencyInjection。3.将IJob实现类、IJobFactory实现类、需要被依赖注入的类(TestClass)添加进容器。4.将scheduler的JobFactory属性替换为IJobFactory实现类的实例。实现IJobFactory接口。的IJob实现类,也就无法进行依赖注入。

2024-09-02 15:20:02 536

原创 Quartz.Net_快速开始

Quartz中主要分为三部分,JobDetail、Trigger、Scheduler,分别是任务、触发器、调度器,三者的关系为:Trigger控制JobDetail的执行时间和频率,而Scheduler负责将具体的Trigger与具体的JobDetail绑定。Execute函数中的代码即为定时任务执行的操作。③创建Scheduler(可使用单例封装)①创建IJob实现类(实现IJob接口)1.安装Quartz依赖。②创建Trigger。

2024-09-02 13:49:11 412

原创 EFCore_循环获取多级导航属性

EFCore_循环获取多级导航属性。

2024-07-27 13:07:12 150

原创 Git_基础命令

git branch 查看节点, 当前节点前会被标注*(当前节点是主节点就只能看到主节点, 否则看到主节点与当前节点)git commit - m "xxx" 提交缓冲区中的更新, 并附说明xxx(说明不允许为空, 否则提交被取消)git push -u origin xxx 将提交推送至名为xxx的分支, 且将该分支作为默认分支。git checkout -b xxx 创建并切换到名为xxx的分支。git push origin xxx 将提交推送至名为xxx的分支。3.切换到要合并的分支。

2024-07-23 20:25:40 327

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

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

2024-07-02 18:10:11 631

原创 EFCore_跟踪机制

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

2024-07-02 15:14:09 207

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

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

2024-07-02 14:28:03 210

原创 EFCore_原生SQL语句

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

2024-07-01 17:42:35 292

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

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

2024-07-01 16:30:55 163

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

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

2024-07-01 15:50:10 226

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

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

2024-05-31 15:49:26 474

原创 EFCore_增删改查

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

2024-05-20 15:54:37 433

原创 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 285

原创 EFCore_创建项目

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

2024-05-14 16:56:21 356

原创 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 338

原创 Blender小记

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

2024-05-14 13:20:42 512

原创 .NET_NLog

摘要

2024-05-08 14:56:18 437

原创 .NET_控制反转简述

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

2024-05-07 16:36:42 447

原创 C#_LINQ简记

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

2024-05-07 13:39:41 329

原创 C#_扩展方法

C#_扩展方法

2024-02-22 11:33:34 621

原创 C#_事件简述

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

2024-02-22 10:19:12 716

原创 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 1510

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

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

2024-02-21 16:30:50 553

原创 C#_索引器

C#_索引器

2024-02-21 15:25:22 506

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

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

2024-02-20 17:24:38 533

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

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

2024-02-20 15:49:07 539

原创 ASP.NET Core WebAPI_Controller简述

ASP.NET Core WebAPI_Controller简述

2024-02-01 17:26:12 442

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

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

2024-02-01 17:21:15 1758

原创 WPF_初步认识TypeConverter

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

2023-06-29 11:27:00 520

原创 WPF_MVVM简述

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

2023-06-08 16:31:26 925

原创 C#_宏定义

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

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

原创 C#_委托简述

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

2023-05-06 15:32:25 870

原创 C#_容器

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

2023-05-06 14:51:00 451

原创 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 646

原创 C#_Enum

C#_Enum

2023-05-04 21:14:57 253

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

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

2023-01-07 02:10:01 1976

空空如也

空空如也

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

TA关注的人

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