diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/TestController.cs b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/TestController.cs index 7cdf2fbb..3d3ad62e 100644 --- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/TestController.cs +++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/TestController.cs @@ -111,11 +111,10 @@ namespace Yi.Framework.ApiMicroservice.Controllers } [HttpGet] + public async Task TestUnitOfWork() { - var userId = await _iUserService.AddInfo(new DTOModel.UserInfoDto { User = new UserEntity { Address = "", UserName = "lisi", Password = "123456" }.BuildPassword() }); - throw new ApplicationException("测试uow"); - await _iRoleService._repository.InsertReturnSnowflakeIdAsync(new RoleEntity { RoleName = "测试", RoleCode = "tt" }); + await _iRoleService.UowTest(); return Result.Success(); } diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db index fbff548e..20be0b0c 100644 Binary files a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db and b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db differ diff --git a/Yi.Framework.Net6/Yi.Framework.Interface/IRoleService.cs b/Yi.Framework.Net6/Yi.Framework.Interface/IRoleService.cs index fffcbe3d..6db2848c 100644 --- a/Yi.Framework.Net6/Yi.Framework.Interface/IRoleService.cs +++ b/Yi.Framework.Net6/Yi.Framework.Interface/IRoleService.cs @@ -15,6 +15,12 @@ namespace Yi.Framework.Interface /// Task> DbTest(); + /// + /// 工作单元测试 + /// + /// + Task UowTest(); + /// /// 通过角色id获取角色实体包含菜单 /// diff --git a/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs b/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs index 47dc8f9c..b35503f0 100644 --- a/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs +++ b/Yi.Framework.Net6/Yi.Framework.Service/RoleService.cs @@ -8,22 +8,32 @@ using Yi.Framework.DTOModel; using Yi.Framework.Interface; using Yi.Framework.Model.Models; using Yi.Framework.Repository; +using Yi.Framework.Uow.Interceptors; namespace Yi.Framework.Service { - public partial class RoleService + public partial class RoleService { public async Task> DbTest() { return await _repository._Db.Queryable().ToListAsync(); } + //添加工作单元特性 + [UnitOfWork] + public async Task UowTest() + { + var res = await _repository.InsertReturnSnowflakeIdAsync(new RoleEntity { RoleName = "测试", RoleCode = "tt" }); + throw new ApplicationException("测试uow"); + return res>0; + } + public async Task GiveRoleSetMenu(List roleIds, List menuIds) { - var _repositoryRoleMenu= _repository.ChangeRepository>(); + var _repositoryRoleMenu = _repository.ChangeRepository>(); //多次操作,需要事务确保原子性 return await _repositoryRoleMenu.UseTranAsync(async () => { //删除用户之前所有的用户角色关系(物理删除,没有恢复的必要) - await _repositoryRoleMenu.DeleteAsync(u => roleIds.Contains((long)u.RoleId) ); + await _repositoryRoleMenu.DeleteAsync(u => roleIds.Contains((long)u.RoleId)); //遍历用户 foreach (var roleId in roleIds) @@ -32,7 +42,7 @@ namespace Yi.Framework.Service List roleMenuEntity = new(); foreach (var menu in menuIds) { - roleMenuEntity.Add(new RoleMenuEntity() { RoleId = roleId,MenuId=menu }); + roleMenuEntity.Add(new RoleMenuEntity() { RoleId = roleId, MenuId = menu }); } //一次性批量添加 @@ -46,7 +56,7 @@ namespace Yi.Framework.Service public async Task GetInMenuByRoleId(long roleId) { return await _repository._Db.Queryable().Includes(u => u.Menus).InSingleAsync(roleId); - + } @@ -58,7 +68,7 @@ namespace Yi.Framework.Service .WhereIF(!string.IsNullOrEmpty(role.RoleName), u => u.RoleName.Contains(role.RoleName)) .WhereIF(!string.IsNullOrEmpty(role.RoleCode), u => u.RoleCode.Contains(role.RoleCode)) .WhereIF(page.StartTime.IsNotNull() && page.EndTime.IsNotNull(), u => u.CreateTime >= page.StartTime && u.CreateTime <= page.EndTime) - .WhereIF(role.IsDeleted.IsNotNull(), u => u.IsDeleted == role.IsDeleted) + .WhereIF(role.IsDeleted.IsNotNull(), u => u.IsDeleted == role.IsDeleted) .OrderBy(u => u.OrderNum, OrderByType.Desc) .ToPageListAsync(page.PageNum, page.PageSize, total); @@ -74,7 +84,7 @@ namespace Yi.Framework.Service return !0.Equals(res1) && res2; } - public async Task GiveRoleSetDept(List roleIds,List deptIds) + public async Task GiveRoleSetDept(List roleIds, List deptIds) { var _repositoryRoleDept = _repository.ChangeRepository>(); //多次操作,需要事务确保原子性 @@ -103,12 +113,12 @@ namespace Yi.Framework.Service var res1 = await _repository.UpdateIgnoreNullAsync(roleDto.Role); var res2 = await GiveRoleSetMenu(new List { roleDto.Role.Id }, roleDto.MenuIds); var res3 = await GiveRoleSetDept(new List { roleDto.Role.Id }, roleDto.DeptIds); - return res1 && res2&& res3; + return res1 && res2 && res3; } public async Task UpdateDataScpoce(RoleInfoDto roleDto) { - var role= new RoleEntity(); + var role = new RoleEntity(); role.Id = roleDto.Role.Id; role.DataScope = roleDto.Role.DataScope; var res1 = await _repository.UpdateIgnoreNullAsync(role); diff --git a/Yi.Framework.Net6/Yi.Framework.Service/Yi.Framework.Service.csproj b/Yi.Framework.Net6/Yi.Framework.Service/Yi.Framework.Service.csproj index 3ff23470..8565dc13 100644 --- a/Yi.Framework.Net6/Yi.Framework.Service/Yi.Framework.Service.csproj +++ b/Yi.Framework.Net6/Yi.Framework.Service/Yi.Framework.Service.csproj @@ -10,6 +10,7 @@ + diff --git a/Yi.Framework.Net6/Yi.Framework.WebCore/AutoFacExtend/CustomAutofacModule.cs b/Yi.Framework.Net6/Yi.Framework.WebCore/AutoFacExtend/CustomAutofacModule.cs index 66f6c59b..fd5024dc 100644 --- a/Yi.Framework.Net6/Yi.Framework.WebCore/AutoFacExtend/CustomAutofacModule.cs +++ b/Yi.Framework.Net6/Yi.Framework.WebCore/AutoFacExtend/CustomAutofacModule.cs @@ -50,6 +50,7 @@ namespace Yi.Framework.WebCore.AutoFacExtend .AsImplementedInterfaces() .InstancePerLifetimeScope() .EnableInterfaceInterceptors() + //开启工作单元拦截 .InterceptedBy(typeof(UnitOfWorkInterceptor)); ///反射注册任务调度层