![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
.Net Core
文章平均质量分 86
懒人Ethan
毕业于天津理工大学,拥有超过10年dotnet和前端开发经验。PMP认证,Microsoft Certified认证。精通ASP.NET/ASP.NET Core、Angular和Vue的开发。
展开
-
EF Core 批量插入操作原理分析
本文主要讨论EF Core 在批量添加操作的基本原理和优化方式,基本原理主要针对EF Core 6.0 和7.0两个版本。原创 2023-10-18 18:05:02 · 1031 阅读 · 0 评论 -
EF Core 7.0 新特性之批量修改
EF Core 7.0 提供了一个可以将LINQ查询和批量修改相结合的方法ExecuteUpdate。由于数据修改是以批量更新的方式完成,所以可以减少数据库的往返次数。本文将主要介绍ExecuteUpdate的使用方法。原创 2023-10-16 18:08:13 · 1681 阅读 · 0 评论 -
解决ASP.NET Core的中间件无法读取Response.Body的问题
本文主要介绍如何在ASP.NET Core的中间件中,读取Response.Body的方法,以便于我们实现更多的定制化开发。本文介绍的方法适用于.Net 3.1 和 .Net 6。原创 2023-10-04 12:35:41 · 1838 阅读 · 2 评论 -
C#中的IQueryable vs IEnumerable (二)
IQueryable 的主要作用是通过其扩展方法和调用过程中使用的委托参数,将这些内容转换成表达式目录树。第三方的ORM框架可以在此基础上进行SQL语句的转换。原创 2023-09-11 18:28:20 · 933 阅读 · 1 评论 -
C# Linq源码分析之Take(四)
本文主要对Take的优化方法进行源码分析,分析Take在配合Select,Where等常用的Linq扩展方法使用时候,如何实现优化处理。本文涉及到Select, Where和Take和三个方法的源码分析,其中Select, Where, Take更详尽的源码分析,请参考我之前写的文章。原创 2023-08-28 14:25:28 · 1007 阅读 · 0 评论 -
C# Linq源码分析之Take (三)
本文在前两篇Take源码分析的基础上,着重分析Range参数中有倒数的情况,即分析TakeRangeFromEndIterator的源码实现。原创 2023-08-18 17:33:55 · 413 阅读 · 0 评论 -
C# Linq源码分析之Take (二)
本文主要分析Linq中Take带Range参数的重载方法的源码。原创 2023-08-17 15:44:05 · 732 阅读 · 0 评论 -
C# Linq源码分析之Take (一)
新的Take重载方法不再接收整数参数,而是接收一个Range类型的参数。它可以从序列中返回指定范围的连续元素。注意:该方法只能在.Net 6 或更高版本中使用,我们之前用的.Net 4.7, 4.8或.Net Core 3.1中,都不支持该方法。原创 2023-08-14 15:26:06 · 951 阅读 · 0 评论 -
C# Linq源码分析之Take方法
基本功能是从序列source中,返回指定个数count的相邻元素。原创 2023-08-11 16:44:06 · 1752 阅读 · 0 评论 -
C# 中使用ValueTask优化异步方法
我们在开发过程中,经常使用async的异步方法,但是有些时候,异步的方法中,可能包含一些同步的处理。本文主要介绍通过ValueTask这个struct,优化异步处理的方法性能。原创 2023-08-01 14:22:34 · 577 阅读 · 0 评论 -
C#中 使用yield return 优化大数组或集合的访问
我们在开发过程中,经常需要在一个很大的数组或集合中搜索元素,以满足业务需求。本文主要介绍通过使用yield return的方式,避免将大量数据全部加载进入内存,再进行处理。从而提高程序的性能。原创 2023-07-31 13:58:10 · 385 阅读 · 0 评论 -
浅谈C#中await运算符在不同类型应用中的不同行为
C#中的await运算符,因其不会阻塞主线程,可以给用户更好的操作体验,所以广泛的应用于各种C#的应用中。本文主要分析其在Console程序,Winform程序和WebApi程序中,其工作行为的异同点,来更好的使用该运算符。原创 2023-07-24 18:04:58 · 452 阅读 · 0 评论 -
C# LINQ源码分析之ToList()
在开发过程中,LINQ的ToList()方法经常被使用,帮助我们将将迭代器转换为具体的List对象。为了更好的了解该方法的工作原理,我们从源码的角度对其进行分析。原创 2022-07-12 17:32:24 · 5223 阅读 · 1 评论 -
C# LINQ源码分析之Count
LINQ代码库中的Count方法作为数据统计的关键方法,经常被使用。在统计数据时候,Count方法是否每次都要遍历整个序列来获取序列元素个数,Count方法内容是否存在优化机制。为了更好的了解该方法的工作原理,我们从源码的角度对其进行分析。......原创 2022-07-04 16:07:05 · 3563 阅读 · 1 评论 -
ASP.NET Core 如何自动完成数据迁移
我们在进行ASP.NET Core开发过程中,经常要面对一个问题,就是开发完成后,需要在测试,生产环境搭建同样站点。而数据库的搭建又是站点搭建中最麻烦的一个环节。本文介绍一种方法,可以直接在站点启动的时候,自动完成数据库的搭建和数据的初始化操作。原创 2022-05-30 14:50:52 · 716 阅读 · 0 评论 -
ASP.NET CORE Web API版本管理工具
本文介绍一个ASP.NET CORE Web API版本管理工具,以方便我们在开发过程中,针对不同的开发版本,进行管理。原创 2022-05-10 12:29:56 · 581 阅读 · 0 评论 -
C# LINQ源码分析之SelectMany
概要在开发过程中,LINQ代码库中的SelectMany方法作为嵌套循环的语法糖,经常被使用,为了更好的了解该方法,我们从源码的角度对其进行分析,以了解其内部工作方式。SelectMany方法介绍SelectMany方法的基本功能是将序列中的每个元素投影到IEnumerable中,并将生成的序列平铺到一个序列中。LINQ代码库提供了4个SelectMany的重载方法如下:方法名称基本介绍SelectMany<TSource,TCollection,TResult>(I原创 2022-02-22 11:46:07 · 2438 阅读 · 0 评论 -
C# LINQ源码分析之Select
在开发过程中,LINQ代码库中的Select方法经常被使用,为了更好的了解该方法,我们从源码的角度对其进行分析。了解如何以最优的方式,使用该方法,从而提升代码的性能。原创 2022-02-15 17:27:54 · 10835 阅读 · 2 评论 -
C# LINQ源码分析之迭代器
迭代器是LINQ中的很多方法的实现基础,像Where,Select或Distinct等常用的LINQ方法底层都是通过迭代器最终实现的。本文从源码角度解释一下迭代器的工作原理,包括像延迟加载,多线程支持,嵌套循环这些问题,如何通过源码最终实现的。本文以Distinct方法来作为例子,说明迭代器的工作原理。将源码中的iterator.cs, Distinct.cs抽取出来,加上一定的日志,以方便我们了解代码的执行流程。原创 2022-02-11 23:09:14 · 935 阅读 · 0 评论 -
C# Linq 源码分析之Distinct方法
C# Linq 源码分析之Distinct方法原创 2022-02-10 15:19:21 · 5862 阅读 · 0 评论 -
C#中的IQueryable vs IEnumerable
概要我们在应用开发中经常用到IQueryable 和 IEnumerable两个接口。如果这两个接口搞混,往往会对程序性能造成很大的影响。本文以一个实例来区分这两个接口,说明在实际开发过程中,这两个接口如何使用。基本定义IEnumerableIEnumerable 是一个接口,客户代码通过实现该接口的GetEnumerator方法,来返回一个具体的IEnumerator.在实际应用中,IEnumerable 面向内存对象,它会将所有的数据载入到内存中,再进行各种操作。**IQueryable原创 2021-12-02 17:17:34 · 7271 阅读 · 2 评论 -
ASP.NET Core中数据绑定的Attribute
概要ASP.NET Core的Web API在调用过程中,经常涉及到Client端参数传递和Server端参数的接收的问题。其中参数主要包括URL参数,表单参数和路由参数等,如何处理好各种类型的参数传递,尤其是复杂类型参数的处理,是正确调用Web API的关键也是难点。本文通过介绍FromQueryAttribute,FromRouteAttribute和FromBodyAttribute三个Attribute,来介绍如果在URL,表单和路由中传递对复杂的对象参数。定义FromQueryAttrib原创 2021-10-28 17:49:08 · 2095 阅读 · 0 评论 -
ASP.NET Core依赖注册自动化实现
概要在ASP.NET CORE开发项目过程中,我们在封装了用户的业务逻辑之后,要按照ASP.NET 自带的DI框架的要求,将我们封装好的业务逻辑类注册到ServiceCollection容器中,这样做避免了我们手工实例化对象,为开发带来了便利。但是我们也应该看到,在带来便利的同时,我们也不得不手工维护注册的代码。对于大型项目,用户的业务逻辑可能非常复杂,需要封装大量的业务类。同样,在项目迭代周期内,也会产生大量新的业务需求,需要反复修改注册的代码。解决方案基于当前的问题,本文提出一种服务自动发现,自原创 2021-08-08 16:55:09 · 683 阅读 · 1 评论 -
ASP.NET CORE Startup文件优化
概要根据ASP.NET CORE的设计思想“Pay for what you use”,在开发过程中,大量的服务配置相关的代码,像EntityFramwork,redist,Jwt, Swagger等等的服务初始化配置内容,都要通过依赖注入的方式引入项目。这就意味着,所有服务的配置相关代码都要放到Startup.cs文件中。本文目的是介绍通过技术改进,实现Startup.cs文件中代码的优化管理。已有解决方案的弊端基于表达式目录树的解决方案...原创 2021-08-06 15:30:46 · 475 阅读 · 1 评论 -
C# Linq源码分析之Where
概要在Dotnet 开发过程中,无论是Web还是Form或是其他领域的开发,Where作为IEnumerable的扩展方法,十分常用。本文对Where方法的关键源码进行简要分析,以方便大家日后更好的使用该方法。本文分析的源码来自 https://github.com/dotnet/runtime.git代码结构分析Where方法的过滤功能主要通过迭代器实现,其源代码包含7个迭代器。按照功能划分如下:索引参与过滤操作运算的迭代器WhereIterator,容器包含Enmuerable,List和A原创 2021-07-23 16:29:08 · 1963 阅读 · 6 评论 -
EntityFramework性能调优之N+1问题的解决
概要在项目开发中,EntityFramework作为一个非常成熟的ORM框架,被广泛使用。其简单易用的特点,极大的加快的开发进度。但是由此产生的性能问题也被很多人所诟病。N+1 条SQL语句问题就是一个比较典型的EntityFramework性能问题,在高并发环境,有时甚至可以使应用程序崩溃。本文就来讨论一下该问题的解决方案。应用场景N+1 问题一般出现在1对多数据对象的查询中,本文以银行分行(Branch)和ATM机两个对象,作为应用场景。一个Branch对应多个ATM机。对象关系如下图所示,对原创 2021-05-12 18:02:57 · 1138 阅读 · 7 评论 -
C#表达式目录树系列之5 –动态创建查询表达式
概要在项目开发中,根据用户的需求,我们的查询表达式一般是固定的,任何新的查询需求都要通过代码的修改来实现。而对于不确定的查询条件,固定查询表达式显然是行不通的。针对固定查询表达式存在的问题,我们提出基于表达式目录树的解决方案,因为它能帮助我们自动构建任何需要的查询表达式,以应用对各种复杂的查询场景。本文介绍一个基于URL参数动态构建查询表达式的实例。希望读者可以充分体会到表达式目录树为我们带来的巨大便利。完整代码已经上传CSDN,需要的读者可以免费下载,如果下载失败请留言告诉我邮箱。设计及关键代码实原创 2021-02-02 18:10:30 · 3035 阅读 · 7 评论 -
C#表达式目录树系列之3 -- 为EF查询实现动态OrderBy
概要在后端开发中,我们常碰到这样的需求,用户需要对数据进行排序和分页,但是基于哪个栏位排序不确定,需要根据用户在页面上的操作动态获取,并且可能有一个或多个栏位参与排序。对于此类需求的一般做法是,前端根据用户的输入生成一个对应的URL,包括分页数据和排序数据。例如: https://xxxx/students?pagestart=1&pagelength=10&orderby=Department desc,Name对于后端,通过URL地址,获取分页和排序信息,需要使用EF的排序。我们想原创 2020-12-23 16:09:30 · 1854 阅读 · 0 评论 -
C#表达式目录树系列之2 --常见的表达式目录树的实例
概要本文主要列举出一些常用的表达式目录树实例,便于以此为基础,构建更复杂的表达式目录树,以满足各种多变的业务场景。表达式目录树的构建,除了使用Expression类提供的静态方法外,一般还需要同反射结合在一起。例如通过反射找到类中具体定义的方法,通过反射找到类中的构造函数等。常用表达式目录树构建实例Student类的定义详见附录。访问对象的属性构建目标 s => s.FirstName s是Student类型代码如下:ParameterExpression sParameter = E原创 2020-12-23 12:04:39 · 2080 阅读 · 5 评论 -
C#表达式目录树系列之1 -- 表达式目录树基本概念
概要本文主要是帮助读者搞清楚什么是表达书目录树,表达书目录树能做什么,如何创建表达书目录树。后续几篇文章侧重于表达书目录树的具体应用。表达式目录树是什么表达式目录树是一种树型结构,它将代码以数据的形式来存储在树的各个节点中,树型结构的每个节点都是一个表达式。这句话初听很拗口,举个例子。相信大家都使用过ADO.NET中的SqlCommand类,把拼装好的SQL代码作为参数实例化该类,SQL代码就能执行。事实上,这种方式采用了和表达式目录树同样的设计思想。只不过SQL代码是以字符串的形式存储。这种设计原创 2020-12-23 11:31:14 · 2514 阅读 · 0 评论 -
C#中的事件和委托那些事
概要我们在做C#的WinForm,WPF或Web Form开发时候,总是要与事件和委托打交道。可能大家会有这些疑问,到底什么是事件,什么是委托,事件和委托是什么关系,事件模型又是什么,为什么C#的事件语法糖会引起歧义,委托是不是可以替代事件。本文希望能通过一个收短信拿快递的例子,帮助大家理清事件和委托的这些事。基本定义事件与委托的定义按照MS的定义如下:事件:Events enable a class or object to notify other classes or objects whe原创 2020-12-16 14:26:28 · 377 阅读 · 2 评论 -
C#中的协变与逆变
大家都知道基类的指针(引用)指向派生类的对象,作为OOP中多态的基础,大量应用于各种项目中,以增强代码的可扩展性。协变、逆变以及不变,都是是在此基础上,阐明了对泛型类的继承规则要求,让泛型类型也获得像基类指针(引用)指向派生类的对象这样的便利,以增强代码的灵活性。定义定义直接引用微软官网的定义:Covariance(协变):Enables you to use a more derived type than originally specified.翻译: 该类型要求使用更多的派生类行而不是原始原创 2020-09-28 18:07:40 · 306 阅读 · 0 评论 -
解决Asp.Net Core 3.1 中无法读取HttpContext.Request.Body的问题
解决Asp.Net Core 3.1 中无法读取HttpContext.Request.Body的问题需求问题描述问题解决解决方案注意事项问题分析附录需求根据项目需要,要为WebApi实现一个ExceptionFilter,不仅要将WebApi执行过程中可能产生的异常信息进行收集,还要把WebApi的参数信息进行收集,以方便未来定位问题。问题描述对于WepApi的参数,一部分是通过URL获取,例如Get请求。对于Post或Put请求,表单数据是保存在Http请求的Body中的。基于此,我们可以在Ex原创 2020-08-13 18:41:40 · 9440 阅读 · 3 评论 -
C#表达式目录树系列之4 -- 解决C#泛型约束与无法创建带参数的泛型实例的矛盾
解决C#泛型约束与无法创建带参数的泛型实例的矛盾问题提出问题分析解决方案基于反射的解决方案基于表达式目录树的解决方案代码附录反射解决方案完整代码表达式目录树解决方案完整代码问题提出有时候我们在项目中,为了提高代码的可扩展性,有这样的需求。在自己创建的泛型类,例如 class Aircraft中,将泛型类型T直接实例化。C#可以支持这样做,但是是有条件的,代码如下:public class Aircraft<TEngine> where TEngine : class, new(){ p原创 2020-08-06 15:15:04 · 1503 阅读 · 2 评论 -
如何通过.Net Core Cli 创建多项目Solution
如何通过.Net Core Cli 创建多项目Solution创建.Net Core Web 项目实现目标项目创建准备创建Solution的sln文件创建所有项目将所有项目添加到当前Solution中设置SportsNews.Web项目的依赖项设置SportsNews.Business项目的依赖项设置SportsNews.Data项目的依赖项设置SportsNews.ETL项目的依赖项创建.Net Core Web 项目本文将介绍如何通过PowerShell和.Net Core Cli 创建一个多项目的原创 2020-06-22 14:31:32 · 538 阅读 · 0 评论