-
NetCore2.2升级到3.1总结
最近公司要求netcore版本从2.2升级到3.1,升级需要修改的配置项和遇到的问题我这边做一个简单的总结。
可参考资料:
https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-5.0&tabs=visual-studio
https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-3.x/breaking-changes
netcore3.1 下载:
https://dotnet.microsoft.com/download/dotnet/3.1
升级之后使用VS2019以及以上版本哦
一、 配置项修改
1. netcore版本修改为3.1

2. Nuget包升级
(1)删除包: Microsoft.AspNetCore.App
(2)删除包:Microsoft.AspNetCore.Razor.Design
(3)升级包版本:Swashbuckle.AspNetCore 升级到5.0.0及以上
3. Program类修改
IWebHostBuilder 修改为IHostBuilder

代码如下:
View Code
4. Startup类修改:
(1) IHostingEnvironment修改为IWebHostEnvironment

(2) ConfigureServices方法返回结果由IServiceProvider修改为void

(3) services.AddMvc()修改为 services.AddControllers().AddNewtonsoftJson()

注意:方法名结尾的async会自动取消。
比如:定义的方法名为SearchMemberAsync(),但是在请求方法SearchMemberAsync时提示没有此方法 ,请求SearchMember方法时却请求成功
为了方法名结尾不取消async,配置SuppressAsyncSuffixInActionNames参数为false。
代码如下:
View Code
(4) swagger配置修改:
代码如下:
View Code
(5) return services.AddDynamicEF 删除return

(6) app.UseMvc修改为app.UseEndpoints

代码如下:
View Code
(7) 删除app.UseDeveloperExceptionPage();
添加app.UseRouting();

5. 视图:由以前的DbQuery修改为 DbSet

并添加以下配置:

代码如下:
View Code
6. Map映射问题
使用映射必须在数据源或者映射源上面标记AutoMap特性


7. 表名列名转换写法变化

8. 枚举DisplayName特征的获取
由[DisplayName(" ")]特征 修改为[Display(Name=" ")] ,不支持DisplayName(" ")了。

以下举例的只是我在项目中遇到的升级3.1之后的问题 ,并不包含所有变更讲解。
1.

异常提示:

2. GroupBy写法问题:
(1) GroupBy在分组之后没有使用select指定查询的列,就会报错。因为此写法法生成不了sql语句。

(2) GroupBy在分组之后聚合问题

异常提示:
3. 语句中使用了判断表字段是否是非空使用了IsEmpty
异常提示:

参照以下写法是可以生成sql语句的:

4. 查询中使用了自定义的函数方法,不能转成正常的sql语句
(1)如图一

异常提示:

GetTimestamp方法是自定义的一个API用来处理时间转换成时间戳。
如左图:在查询使用过程中,直接使用了自定义的方法(GetTimestamp)做时间戳转换,在netcore3.1 直接异常了,
GetTimestamp方法不 是sql语句中可以中的函数,因此此条查询写法不能转成一个正确的sql语句了 ,直接异常了。
如右图:这种转化只能先将数据查询出来放在内存中,然后对内存中的数据再调用GetTimestamp方法做时间转化。
(2)如图二

原文:https://www.cnblogs.com/yaoxiaodan/p/15263204.html
可参考资料:
https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-5.0&tabs=visual-studio
https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-3.x/breaking-changes
netcore3.1 下载:
https://dotnet.microsoft.com/download/dotnet/3.1
升级之后使用VS2019以及以上版本哦
一、 配置项修改
1. netcore版本修改为3.1

2. Nuget包升级
(1)删除包: Microsoft.AspNetCore.App
(2)删除包:Microsoft.AspNetCore.Razor.Design
(3)升级包版本:Swashbuckle.AspNetCore 升级到5.0.0及以上
3. Program类修改
IWebHostBuilder 修改为IHostBuilder

代码如下:

4. Startup类修改:
(1) IHostingEnvironment修改为IWebHostEnvironment


(2) ConfigureServices方法返回结果由IServiceProvider修改为void

(3) services.AddMvc()修改为 services.AddControllers().AddNewtonsoftJson()

注意:方法名结尾的async会自动取消。
比如:定义的方法名为SearchMemberAsync(),但是在请求方法SearchMemberAsync时提示没有此方法 ,请求SearchMember方法时却请求成功
为了方法名结尾不取消async,配置SuppressAsyncSuffixInActionNames参数为false。
代码如下:

(4) swagger配置修改:


代码如下:

(5) return services.AddDynamicEF 删除return

(6) app.UseMvc修改为app.UseEndpoints

代码如下:

(7) 删除app.UseDeveloperExceptionPage();
添加app.UseRouting();

5. 视图:由以前的DbQuery修改为 DbSet

并添加以下配置:

代码如下:

6. Map映射问题
使用映射必须在数据源或者映射源上面标记AutoMap特性



7. 表名列名转换写法变化

8. 枚举DisplayName特征的获取
由[DisplayName(" ")]特征 修改为[Display(Name=" ")] ,不支持DisplayName(" ")了。



二、 遇到的问题
具体变更请看3.x的重大变更事项:https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-3.x/breaking-changes (认认真真仔仔细细看完)以下举例的只是我在项目中遇到的升级3.1之后的问题 ,并不包含所有变更讲解。
1.

异常提示:

2. GroupBy写法问题:
(1) GroupBy在分组之后没有使用select指定查询的列,就会报错。因为此写法法生成不了sql语句。

(2) GroupBy在分组之后聚合问题

异常提示:

3. 语句中使用了判断表字段是否是非空使用了IsEmpty

异常提示:

参照以下写法是可以生成sql语句的:

4. 查询中使用了自定义的函数方法,不能转成正常的sql语句
(1)如图一

异常提示:

GetTimestamp方法是自定义的一个API用来处理时间转换成时间戳。
如左图:在查询使用过程中,直接使用了自定义的方法(GetTimestamp)做时间戳转换,在netcore3.1 直接异常了,
GetTimestamp方法不 是sql语句中可以中的函数,因此此条查询写法不能转成一个正确的sql语句了 ,直接异常了。
如右图:这种转化只能先将数据查询出来放在内存中,然后对内存中的数据再调用GetTimestamp方法做时间转化。
(2)如图二

原文:https://www.cnblogs.com/yaoxiaodan/p/15263204.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式