第四节:框架版本大升级(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 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。