c#
文章平均质量分 61
董厂长
I'm looking for opportunities. If you are interested, please send me a message.
展开
-
saas服务,对同一个功能,需要使用不同客户的接口。那么哪种设计模式可以解决我的问题?
面对这种需要根据不同客户使用不同接口的情况,一个常见的解决方案是使用。策略模式允许在运行时选择算法或行为,非常适合于你描述的场景,即根据不同的客户使用不同的发送短信接口。原创 2024-08-16 17:56:27 · 518 阅读 · 0 评论 -
用于计算Quartz中,下次触发时间距离当前时间的程序
将表示下一次触发的时间距离现在还有多少分钟。,然后与当前时间进行比较,以确定下一次触发的时间。是以本地时间表示的,所以你需要确保。在 .NET 中,一个。都是以相同的时区表示的。原创 2024-05-11 14:36:03 · 364 阅读 · 0 评论 -
c# 逆变 / 协变
关键字,我们可以在泛型类型参数中限制类型的协变性和逆变性,以确保类型安全性。这样做的好处是能够更容易地对泛型类型进行复用和灵活性。接口,用于查询动物信息。同样地,我们还创建了一个。关键字用于限制类型参数的协变性和逆变性。在面向对象编程中,尤其是使用泛型时,,表示它只能查询(读取)动物信息。,表示它只能添加(写入)动物。注意,虽然我们将其赋值给。变量,这也是合法的,因为。变量,但我们仍然只能使用。变量,这是合法的,因为。然后,我们创建了一个。接口,用于添加动物。原创 2023-11-22 16:00:19 · 832 阅读 · 2 评论 -
LINQ的内部联接、分组联接和左外部联接
最近在优化定时任务相关的代码,建议是把总查询放到内存中去坐,尽量减少打开的数据库连接最近在优化定时任务相关的代码,建议是把总查询放到内存中去坐,尽量减少打开的数据库连接。原创 2023-09-14 22:40:49 · 782 阅读 · 0 评论 -
c#:委托 泛型委托的使用 泛型约束
这样做的好处是,通过使用 delegate,我们可以将方法作为一个参数传递给其他方法,或者将其存储在变量中,以便在稍后的代码中调用它。在 C# 中,delegate 是一种引用类型,它允许您定义和使用可以引用特定方法的对象。delegate 可以看作是一种函数指针,它可以在运行时动态地调用不同的方法。泛型委托是一种允许指定不同类型的方法作为参数的委托。它可以提供更大的灵活性和重用性,因为您可以在运行时根据需要指定方法的类型。在上面的示例中,我们首先定义了一个 delegate 类型。参数和无返回值的方法。原创 2023-08-28 23:21:56 · 1248 阅读 · 0 评论 -
ABP:get index in foreach()/ 在foreach中使用index
具体来说,我们可以使用 Select 方法生成一个包含索引值的元组,然后使用 var (singleBeamGroup, index) 语法糖来同时声明两个变量,其中 index 变量将包含当前循环的索引值。但是,在某些情况下,我们需要获取当前循环的索引值,以便进行一些操作。其中,value 表示集合中的每个元素,i 表示元素在集合中的索引值。如果你使用的是较早的版本,可以考虑使用传统的 for 循环来获取索引值。变量表示当前循环的集合元素,index 变量表示当前循环的索引值。原创 2023-07-10 15:25:26 · 111 阅读 · 0 评论 -
Task.FromResult()是什么?应该在何种情况下使用?
例如,如果您编写了一个方法,该方法需要返回一个 `Task` 对象,但实际上不涉及任何异步操作,那么您可以使用 `Task.FromResult()` 来创建一个已完成的 `Task` 对象,并将要返回的结果分配给该对象。只有在需要返回一个 `Task` 对象的方法中,且该方法不执行任何异步操作时,才需要使用它。` 是一个静态方法,可以用于创建一个已完成的 `Task` 对象,并将指定的结果分配给该对象。对象,并将要返回的结果分配给该对象。` 来创建一个已完成的 `Task` 对象,并将 `原创 2023-06-27 10:17:32 · 1571 阅读 · 0 评论 -
关于set变更通知涉及的一些知识点
的占位符,表示需要插入变量或表达式的位置。大括号内的表达式是一个用圆括号括起来的成员访问表达式,它在运行时被求职,用于获取修改后的名称属性的值。,它们分别表示触发事件的对象和事件数据。匿名函数的主体内有一行代码,输出一个字符串,其中包含名称属性新的值,以及触发事件的对象的名称。这允许在继承类中覆盖此方法,并添加进一步的处理逻辑。如果不同,我们才更新存储字段,并调用。属性,从而引发对应的事件并显示名称已更改的消息。作为存储名称的后端字段,并将其封装在公共属性。在此例中,我们创建了一个新的。原创 2023-06-08 16:48:09 · 566 阅读 · 0 评论 -
observableCollection<T>在MAUI中如何使用
是一个可观察的集合类,它可以在集合中添加、删除或更改元素时通知绑定到该集合的控件进行更新。这使得在 WPF、Windows Forms 和 ASP.NET 等应用程序中,可以轻松地实现数据绑定和 UI 更新。此问题出现的原因:之前看资料,viewmodel中还需要写事件通知view更新,感觉这个很麻烦,后来看到observableCollection可以方便的进行事件通知。当然,实际应用中可能涉及到更复杂的数据绑定和 UI 更新操作,但是基本的原理是相同的。在 MAUI 中,可以使用。原创 2023-05-23 22:26:21 · 806 阅读 · 0 评论 -
关于ABP使用工作单元的Q&A --- UOW方式/AOP/AOP思想的体现/ABP体现AOP
在 ABP 框架中,工作单元(UnitOfWork)是一个重要的概念,它负责管理与数据库的交互操作。在应用程序中使用工作单元可以提高代码的可测试性和可维护性。下面是在 ABP 应用程序中使用工作单元的示例代码:在上面的示例代码中,我们注入了一个名为 的 类型的依赖项,并在 方法中使用工作单元来管理与数据库的交互。首先,在方法的开头处我们使用 语句创建了一个新的工作单元对象 ,并在其作用域内执行了一系列数据库操作。这些操作包括插入一条新记录和提交保存更改。如果在执行这些操作时出现异常,我们会在原创 2023-04-26 11:17:39 · 818 阅读 · 0 评论 -
AutoMapper自定义映射相关内容
AutoMapper提供了相关的API来支持自定义的Mapping配置,并且他支持lamda。比较复杂,并且每次都需要手动映射。使用自定义的AutoMapper。原创 2023-04-23 10:20:33 · 271 阅读 · 0 评论 -
c#中使用元祖的场景
C#中元组(Tuple)是一个可以包含多个不同类型的元素的数据结构。元组可以在需要返回多个值时使用,而不必显式地定义一个类或结构。需要注意的是,元组不应该被用来代替类或结构体,它们只应该在需要返回多个值时使用。如果需要在多个方法中使用相同的数据结构,应该使用类或结构体来定义它。个人感觉结合LINQ使用比较合理,不要另外定义一个类,直接用。原创 2023-04-15 21:22:04 · 565 阅读 · 0 评论 -
ABP:foreach和Foreach区别
即使我们在遍历过程中删除了列表中的元素,也不会引发异常,也不会引起循环的意外行为,因为Parallel()方法是对多个线程进行并行操作,不会修改被遍历的集合本身,也就不会引起问题。foreach是一种用于遍历集合的基本循环结构,而Foreach是ABP框架中提供的多线程并行遍历集合的工具类。它们各自有其适用的领域,需要。在使用foreach循环时,循环变量会被拷贝,因此在循环内修改该变量不会影响循环的次数和结果。与此不同的是,在Foreach中,遍历枚举器时,可以使用单独的线程并行进行操作。原创 2023-03-31 16:46:37 · 168 阅读 · 0 评论 -
.net 拓展方法的相关问题
拓展方法(Extension Method)是一种在已有类型上添加新方法的技术,可以方便地对现有类型进行功能扩展而不需要修改原有类型的定义。在 C# 中,拓展方法是通过静态方法实现的,但是它们的调用方式与实例方法相同。在上面的示例中,我们定义了一个名为 IsNullOrEmpty 的拓展方法,它扩展了 string 类型。如果一个方法同时满足以上两个条件,那么它就是一个拓展方法。标识,并且这个参数的类型确定了要扩展的类型。方法的第一个参数必须使用。原创 2023-03-26 21:03:39 · 309 阅读 · 0 评论 -
.net 下对于XML的相关操作及资源
工作中相关的task需要对xml文件进行操作。记录一下相关的操作。最实用的应该是根据属性选择对应的节点,直接查找到之后插入生成的xml。暂时的想法是 json -> jObject -> xml其实没什么特殊点的,就当js操作html一样,看明白api,关于生成和遍历用深度优先就可。原创 2023-02-21 16:57:09 · 524 阅读 · 2 评论 -
C# String与StringBuilder 的区分
字符串一旦创建就不可修改大小,每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。所以对字符串添加或删除操作不频繁的话,就几个固定的string累加的时候就不需要StringBuilder了,毕竟StringBuilder的初始化也是需要时间的。String声明之后在内存中大小是不可修改的,而StringBuilder可以自由扩展大小(String分配在栈区,StringBuilder分配在堆区)总结:上面的a1和sb在输出结果一样的。原创 2023-02-20 17:48:32 · 1223 阅读 · 0 评论 -
JToken, JObject, JArray 的一些内容
JProperty - 表示一个JSON属性(在JObject中是一个name/JToken键值对): 用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化。:Newtonsoft.Json封装类,里面的JToken直接实现对JSON的增删改查。JContainer - 能够包含其它JToken的JToken抽象基类。JArray - 表示一个JSON数组(包含一个有序的List):一旦遇到动态的json数据,这种方法就不使用。原创 2023-02-16 16:16:37 · 1734 阅读 · 0 评论 -
List<T>, IQueryable, IEnumerable 关系和区别
最近在修项目的历史代码,发现搞混了很多拓展方法,写一篇博客澄清一下。iqueryable不应该和ienumerable比而应该和ilist比父接口。原创 2022-12-15 22:13:15 · 961 阅读 · 2 评论 -
ABP:内置logger and 第三方库serilog 之间的关系
今天在看项目的日志记录功能,比较疑惑为什么项目中有的地方使用然后又在资源文件下看见日志的第三方库Serilog解答:ASP.NET Core 提供了 Logging 的抽象接口, third party 都会依据抽象来做实现. ASP.NET Core 自己也实现了一套简单的 log, 它只能不能只能输出到控制台,但是不能输出到文件Serilog.原创 2022-12-01 15:59:01 · 649 阅读 · 0 评论 -
Find和FirstOrDefault()的区别
Find最终是建立在Array的查找之上,而在IEnemerable上的FirstOrDefault是使用foreach查找的。nd方法和FirstOrDefault方法效果相同,都是返回满足条件的第一个元素,如果没有该元素,则返回null。1)Find方法是.netFramework2.0的,而FirstOrDefault是3.5的。2)Find方法只能在List上使用,而后者能更广泛应用在IEnemerable上。那么这两个扩展方法有什么不同?原创 2022-11-23 11:02:57 · 698 阅读 · 2 评论 -
ABP后端的校验使用:FluentValidation
EF Core学习笔记:配置的方式 特性/Fluent API_董厂长的博客-CSDN博客_efcore 特性前置笔记:EF Core学习笔记:CRUD_董厂长的博客-CSDN博客两种配置方式 1.特性配置 2.Fluent Api第一种方式写在实体类中,比较耦合,最好使用第二种。.net内置数据校验机制,在项目代码中发现很多地方使用了特性校验。原创 2022-11-01 16:57:44 · 753 阅读 · 0 评论 -
关于LINQ的模糊查询
利用linq中的WhereIf扩展方法。原创 2022-11-01 12:11:07 · 1258 阅读 · 0 评论 -
c# [Serializable]特性
序列化前后对象的变化:对于_myInt成员,其顺利地通过反序列化还原了初始值:而_myPrivate成员,由于NonSerialized的作用而丢失了初始值。可以通过申明Serializable特性来使类型的对象可以被序列化,同时,对于一些特殊的不希望被序列化的成员,可以为其添加NonSerialized特性。在.NET中,通过Serializable特性提供了序列化对象实例的机制。而对象的实例则包含类型的成员变量、类型的名称以及对象所在的程序集等信息。,是指把实例对象转换为可方便存储、传输和交互的。原创 2022-11-01 11:43:03 · 692 阅读 · 0 评论 -
理解一下C#的异步编程方式
await必须用来修饰Task或Task,而且只能出现在已经用async关键字修饰的异步方法中。使用await关键字后,.NET会自动把返回结果包装在一个Task类型的对象中。net4.0在ThreadPool的基础上推出了Task,Task拥有线程池的优势,同时也解决了使用线程池不易控制的弊端。async用来修饰方法,表明这个方法是异步的,声明的方法的返回类型必须为:void,Task或Task。,而且只能出现在已经用async关键字修饰的异步方法中。原创 2022-09-20 11:02:55 · 1439 阅读 · 0 评论 -
Web Api的两种风格,实战的建议 / 附:ABP中的处理
对于极少数参数内容超过URL限制的请求,由于GET、PUT请求都是幂等的,因此我们把请求改成通过PUT请求,然后通过报文体来传递参数。对于用户不存在,不仅要404,而且把响应报文体设置为{“code”:3,”message”:”用户名已存在”},这样能区分出来是哪里的问题。1、对于数据库服务器连接失败、请求报文格式、服务器端异常等非业务错误,服务器端应该返回4xx、5xx等状态码。HTTP谓词:GET、POST(新增)、PUT(整体更新)、DELETE、PATCH(局部更新)等;什么是“幂等”,举例?...原创 2022-08-27 15:24:45 · 371 阅读 · 0 评论 -
ABP:是否应该在一个应用服务中调用另外一个应用服务?
在改bug过程中,我发现我需要在创建用户的函数下调用另外一处application service下的函数。相当于我想在一个应用服务中调用另外一个应用服务。原创 2022-08-24 10:04:09 · 717 阅读 · 0 评论 -
ABP:关于JWT代替session
但是,使用token进行认证的话, token可以被保存在客户端的任意位置的内存中,不一定是cookie,所以不依赖cookie,不会存在这些问题。应用:使用Session进行身份认证的话,需要保存一份信息在服务器端,而且这种方式会依赖到Cookie(需要 Cookie 保存 SessionId),所以不适合移动端。2. 不需要在服务端保存会话信息,也就是说不依赖于cookie和session,所以没有了传统session认证的弊端,特别适用于。session机制在分布式系统下,有诸多问题。原创 2022-08-23 23:47:11 · 561 阅读 · 0 评论 -
EF Core: 使用AsNoTracking减少内存调用 / ABP中使用的注意事项
变动跟踪代理:变动跟踪代理是一种会主动通知Entity Framework实体对象发生变动的机制。如:延迟加载的实现方式。要使用变动跟踪代理,需要在定义的类结构中,Entity Framework可以在运行时从POCO类中创建动态类型并重写POCO属性。当Entity Framework需要知道对象的变动时,将先把当前实体与快照中的对象进行扫描对比。解答:当你使用EFCore 保存修改是的时候,当然需要EF Core帮你跟踪。EF Core技巧:利用为跟踪的状态,先改属性值,再修改状态,保存实体。...原创 2022-08-22 23:13:12 · 1380 阅读 · 0 评论 -
ABP: 关于IRepository不继承IQueryable<TEntity>的问题 / lQueryable和IEnumerable的区别
GetBy....() 代表了一类查询方法,因为我们的业务比较复杂,对 Book 的查询会千奇百怪,所以,没有办法,我们只能增加各类查询方法来满足需求,最后可能导致的结果是,一个 Where 对应一个查询方法,IBookRepository 会充斥着各类查询方法,并且这些查询方法一般只会被一个 Application 方法调用,如果你查看下 GetBy....() 方法实现,会发现其实都大同小异,,最后执行 SaveChanges 就可以了,在持久化数据库的时候,会判断实体状态值的概念,最后进行应用改变。.原创 2022-08-17 16:55:37 · 735 阅读 · 0 评论 -
EF Core: .toList() .toArray() 的作用
很多数据库的ADO.NET Core Provider是不支持多个DataReader同时执行的。一次性加载数据到内存:用IQueryable的ToArray()、ToArrayAsync()、ToList()、ToListAsync()等方法。2、场景2:如果方法需要返回查询结果,并且在方法里销毁DbContext的话,是不能返回IQueryable的。2、DataTable:把所有数据都一次性从数据库服务器都加载到客户端内存中。1、场景1:遍历IQueryable并且进行数据处理的过程很耗时。...原创 2022-08-14 16:48:12 · 565 阅读 · 0 评论 -
EF Core :IQueryable的延迟执行
5、简单判断:一个方法的返回值类型如果是IQueryable类型,那么这个方法一般就是非终结方法,否则就是终结方法。1、IQueryable只是代表一个“可以放到数据库服务器去执行的查询”,它没有立即执行,只是“可以被执行”而已。:GroupBy()、OrderBy()、Include()、Skip()、Take()等。:遍历、ToArray()、ToList()、Min()、Max()、Count()等;2、在查询之后、foreach前后分别加上输出语句,查看输出内容的顺序。的时候不会执行查询,而调用。.原创 2022-08-08 23:27:25 · 649 阅读 · 2 评论 -
EF Core:基于关系的复杂查询 区分IEnumerable和IQueryable
基于关系的复杂查询表结构描述:一个文章带有多个评论,现在想输出所有,评论中带“微软”的文章。换句话说开,只要这个文章中的评论带这个词,就放入集合中去。基于EF Core的实体间关系配置,我们不仅可以让数据的插入、获取等变得非常方便,而且让基于关系的过滤条件的时间也变得非常简单。(where相当于条件过滤)...原创 2022-07-31 15:51:01 · 572 阅读 · 0 评论 -
EF Core: 一对一,多对多的配置
在“一对多”的关系中,很显然是需要在“多”端有一个指向“一”端的列,因此除非我们需要显式的声明一个外键属性,否则EFCore。会自动在“多”端的表中生成一个指向“一”端的外键列,不需要我们显式的声明一个外键属性。多对多的关系配置可以放到任何一方的配置类中,这里把关系配置代码放到了。,因此必须显式的在其中一个实体类中声明一个外键属性。对于一对一关系,由于双方是“平等”的关系,EFCore表关系的配置。外键列可以建在任意一方。...原创 2022-07-28 22:04:13 · 1589 阅读 · 0 评论 -
EF core :自引用的组织结构树
复习一下,需要继承自IEntityTypeConfiguration接口。并且实现Configure方法。父节点and子节点也是OrgUnit类型的属性。描述这样一种情况组织单元形成的一棵树。EFcore的配置。原创 2022-07-24 17:59:51 · 555 阅读 · 0 评论 -
EF Core学习笔记:额外的外键属性 / 单项导航属性
虽然一直在做定制化开发,但是不能总是食嗟来之食。很多东西还是自己必须要掌握的。额外的外键属性为什么需要外键属性1、EF Core会在数据表中建外键列。2、如果需要获取外键列的值,就需要做关联查询,效率低。(各种join)3、需要一种不需要Join直接获取外键列的值的方式。设置外键属性1、在实体类中显式声明一个外键属性。2、关系配置中通过HasForeignKey(c=>c.ArticleId)指定这个属性为外键。3、除非必要,否则不用声明,因为会引入重复。然后记得去配置.原创 2022-07-19 23:14:43 · 1820 阅读 · 1 评论 -
EF Core学习笔记:一对多关系配置
最近迁移项目。发现有表结构是一对多关系。定位申请单对应多个制模。自己对这种关系不够熟悉,不敢乱改。现在补一下基础。数据库表之间的关系:一对一、一对多、多对多(需要一张第三方表来记录)。 1、迁移生成数据库表。2、编写代码测试数据插入。3、不需要显式为Comment对象的Article属性赋值(当前赋值也不会出错),也不需要显式地把新创建的Comment类型的对象添加到DbContext中。EF Core会“顺竿爬”。个人理解:一对多这样配置完,你只要操作 article 表,而不用特意去操作comm原创 2022-07-16 14:02:57 · 1401 阅读 · 0 评论 -
EF Core学习笔记:反向工程 + 底层操作数据库原理
EF core三种建模模式:DB first / Model first / Code first反向工程:根据数据库表来反向生成实体类应用场景:通过旧的数据库生成新的项目命令: Scaffold-DbContext 后面跟上数据库的链接字符串注意1、生成的实体类可能不能满足项目的要求,可能需要手工修改或者增加配置。2、再次运行反向工程工具,对文件所做的任何更改都将丢失。3、不建议把反向工具当成了日常开发工具使用,不建议DBFirst。---------------------------------原创 2022-07-13 20:00:25 · 585 阅读 · 0 评论 -
EF Core学习笔记:关于主键 对IGuidGenerator的理解
提要:公司项目使用Guid 这样就明白了 ABP文档中的这段话。之前被teamleader说过,特意过来补基础。guid算法:它使用网卡MAC、地址、纳秒级时间、芯片ID码和许多可能的数字,这样保证每次生成的GUID永远不会重复,无论是同一个计算机上还是不同的计算机。个人理解:应用于分布式系统,适合高并发。自增id 慢/冲突 这边同样揭开另外一个疑惑,我自己定义一个实体类,会在构造器里写上guid id。但是别人就没写,原因是EF core会自动的加上guid。 拓展的知识点(暂时没遇到过,先记录一下).原创 2022-07-12 22:59:23 · 373 阅读 · 0 评论 -
EF Core学习笔记:配置的方式 特性/Fluent API
前置笔记:EF Core学习笔记:CRUD_董厂长的博客-CSDN博客两种配置方式 1.特性配置 2.Fluent Api第一种方式写在实体类中,比较耦合,最好使用第二种。原创 2022-07-07 22:08:14 · 171 阅读 · 0 评论 -
EF Core :迁移已经应用到数据库,进行迁移回滚(附:其他一些命令)
前置笔记:EF Core 迁移数据库,以及对数据库升级的思考_董厂长的博客-CSDN博客_efcore 数据迁移这两天一直在学习ABP VNext框架,整到数据库那一块了。发现问了问组里大佬,要使用EFCore迁移数据库。我寻思这和我自己以前搞得不太一样,以前是要写SQL或者直接GUI建表,现在怎么命令行敲一下就自动生成了,写个博客记录一下。EF Core 是一个ORM(对象关系映射),它使 .NET 开发人员可以使用 .NET对象操作数据库,避免了像ADO.NET访问数据库的代码,开发者只需要编写对象即可原创 2022-07-06 11:06:01 · 1767 阅读 · 4 评论