VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 网站开发 > ASPnet >
  • 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.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

相关教程