第四節:框架版本大升級(CoreMvc7.x +EFCore7.x)

一.  版本升級

1. 將各個類庫、項目都升級爲 .Net7.0

 2. AutoFac升級

   【AutoFac 6.4.0】 升級到  【7.0.1】

3. 基本庫升級

   【System.Text.Json 6.0.5】 升級到 【7.0.2】

   【Microsoft.Extensions.Configuration 6.0.1】 升級到  【7.0.0】

   【Microsoft.Extensions.Configuration.FileExtensions 6.0.0】 升級到  【7.0.0】

   【Microsoft.Extensions.Configuration.Json 6.0.0】 升級到  【7.0.0】

   【Microsoft.Extensions.Configuration.Xml 6.0.0】 升級到  【7.0.0】

   【Microsoft.Extensions.DependencyInjection 6.0.0】 升級到  【7.0.0】

   【Microsoft.Extensions.Http 6.0.0】 升級到  【7.0.0】

   【Swashbuckle.AspNetCore 6.3.0】 升級到  【6.5.0】

   【System.Data.SqlClient 4.8.3】 升級到  【4.8.5】

   【Microsoft.VisualStudio.Web.CodeGeneration.Design 6.0.8】 升級到  【7.0.7】

   【Microsoft.Extensions.Caching.Memory 6.0.1】 升級到  【7.0.0】

4. 日誌相關

   【Microsoft.Extensions.Logging 6.0.0】 升級到  【7.0.0】

   【Microsoft.Extensions.Logging.Console 6.0.0】 升級到  【7.0.0】

   【Microsoft.Extensions.Logging.Debug 6.0.0】 升級到  【7.0.0】

   【Serilog 2.11.0】 升級到  【2.12.0】

5. 工具類相關

  【NETCore.Encrypt 2.1.0】 升級到  【2.1.1】

  【NPOI 2.5.6】 升級到  【2.6.0】

  【Newtonsoft.Json 13.0.1】 升級到  【13.0.3】

6. Redis相關

 【CSRedisCore 3.8.668】 升級到  【3.8.670】

 【Caching.CSRedis 3.8.668】 升級到  【3.8.670】

7. EFCore相關

  刪掉:EFCore.BulkExtensions,使用官方批量修改和刪除,以及老楊框架的批量增加即可

 【Microsoft.EntityFrameworkCore.SqlServer 6.0.7】 升級到  【7.0.7】

 【Microsoft.EntityFrameworkCore.Tools 6.0.7】 升級到  【7.0.7】

  安裝老楊框架【Zack.EFCore.Batch.MSSQL_NET7  7.1.4】

 

二. 代碼修改

1. 在BaseService封裝EFCore7.x自帶的批量修改和刪除

封裝代碼:

 #region 16-批量刪除
    /// <summary>
    /// 16-批量刪除
    /// </summary>
    /// <typeparam name="T">實體類型</typeparam>
    /// <param name="delWhere">刪除條件</param>
    /// <returns></returns>
    public async Task<int> BatchDeleteAsync<T>(Expression<Func<T, bool>> delWhere) where T : class
    {
        int count = await db.Set<T>().Where(delWhere).ExecuteDeleteAsync();
        return count;
    }
    #endregion

    #region 17-批量更新
    /// <summary>
    /// 17-批量更新
    /// </summary>
    /// <typeparam name="T">實體類型</typeparam>
    /// <param name="updateWhere">更新條件</param>
    /// <param name="setPropertyCalls">更新實體表達式</param>
    /// <returns></returns>
    public async Task<int> BatchUpdateAsync<T>(Expression<Func<T, bool>> updateWhere, Expression<Func<SetPropertyCalls<T>, SetPropertyCalls<T>>> setPropertyCalls) where T : class
    {
        int count = await db.Set<T>().Where(updateWhere).ExecuteUpdateAsync(setPropertyCalls);
        return count;
    }
    #endregion

 

2. 封裝老楊的批量插入方法

  詳見代碼 

    #region  01-批量插入
    /// <summary>
    /// 01-批量插入
    /// </summary>
    /// <typeparam name="T">實體類型</typeparam>
    /// <param name="list">實體集合</param>
    /// <returns></returns>
    public async Task InsertBulkAsync<T>(List<T> list) where T : class
    {
        await db.BulkInsertAsync(list);  

        //由於BulkInsertAsync和上述【EFCore.BulkExtensions】程序集名稱重複,所以這裏採用擴展方法來處理
        //await MSSQLBulkInsertExtensions.BulkInsertAsync(db, list);
    }
    #endregion

 

3. 映射文件

  連接字符串中需要新增 TrustServerCertificate=true; 否則SSL證書錯誤

(1). 全局新增
【
    Scaffold-DbContext "Server=xxx;Database=Vue3AdminDB;User ID=vue3admin;Password=xxx;TrustServerCertificate=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entity -Context CoreFrameDBContext -UseDatabaseNames -DataAnnotations -NoPluralize

】

(2). 全局修改
【
    Scaffold-DbContext "Server=xxx;Database=Vue3AdminDB;User ID=vue3admin;Password=xxx;TrustServerCertificate=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entity -Context CoreFrameDBContext -UseDatabaseNames -DataAnnotations -Force -NoPluralize

】

 

 

三. 測試

1. 批量更新和刪除

   【測試通過】

            #region 01-批量更新
            {

                int count = await baseService.BatchUpdateAsync<T_SysErrorLog>(u => u.addTime < DateTime.Now,
                    u => u.SetProperty(u => u.delFlag, 1)
                           .SetProperty(u => u.userAccount, u => u.userAccount + "00000")
                );

            }
            #endregion



            #region 02-批量刪除 
            {
                int count = await baseService.BatchDeleteAsync<T_SysErrorLog>(u => u.delFlag == 1);
            }
            #endregion

2. 批量插入

   【測試通過】

            {
                List<T_SysErrorLog> list = new();
                for (int i = 0; i < 10; i++)
                {
                    T_SysErrorLog log = new();
                    log.id = Guid.NewGuid().ToString("N");
                    log.userId = "0002";
                    log.userAccount = "admin";
                    log.logLevel = "2";
                    log.logMessage = "msg1";
                    log.addTime = DateTime.Now;
                    log.delFlag = 0;
                    list.Add(log);
                }
                await baseService.InsertBulkAsync(list);
            }

3. 日誌測試

   【測試通過】

 

 4. 部署測試

  (1). 打包的時候採用【獨立部署】的模式,然後服務器再沒有安裝.net7.0程序集的情況下就可以使用

   PS:也不需要單獨處理各種程序集升級的問題了

  (2). 只需要把 YpfCore.Service.dll 程序集手動copy進去了

  (3). 配合前端功能進行測試,測試通過

 

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鵬飛)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 聲     明1 : 如有錯誤,歡迎討論,請勿謾罵^_^。
  • 聲     明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章