最近公司要求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. 1.       netcore版本修改为3.1  

      

 

2.       Nuget包升级

         (1)删除包:   Microsoft.AspNetCore.App

    (2)删除包:Microsoft.AspNetCore.Razor.Design

    (3)升级包版本:Swashbuckle.AspNetCore 升级到5.0.0及以上

 

  1. 3.      Program类修改

 IWebHostBuilder 修改为IHostBuilder  

 

 代码如下: 


 View Code


 

  1. 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.        表名列名转换写法变化   

     

 

  1. 8.       枚举DisplayName特征的获取 

   由[DisplayName(" ")]特征 修改为[Display(Name=" ")]         

     

            

      

二、    遇到的问题 

        1.                  

     

    报错提示:  

    

 

2.           GroupBy写法问题:

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

 

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

     

   

 

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