From 4657a461e381a93327345ed75132e59533fd2c76 Mon Sep 17 00:00:00 2001 From: "David P.G" Date: Thu, 24 Jul 2025 21:06:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=BC=96=E8=BE=91=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E8=A1=A8=E7=9A=84=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interfaces/IVariableTableAppService.cs | 2 +- .../Services/VariableTableAppService.cs | 27 ++++++++++++++--- .../Services/VariableTableAppServiceTest.cs | 30 +++++++++++++++++++ 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/DMS.Application/Interfaces/IVariableTableAppService.cs b/DMS.Application/Interfaces/IVariableTableAppService.cs index 4baa34d..03f9da7 100644 --- a/DMS.Application/Interfaces/IVariableTableAppService.cs +++ b/DMS.Application/Interfaces/IVariableTableAppService.cs @@ -10,7 +10,7 @@ namespace DMS.Application.Interfaces Task GetVariableTableByIdAsync(int id); Task> GetAllVariableTablesAsync(); Task CreateVariableTableAsync(CreateVariableTableWithMenuDto createDto); - Task UpdateVariableTableAsync(VariableTableDto variableTableDto); + Task UpdateVariableTableAsync(VariableTableDto variableTableDto); Task DeleteVariableTableAsync(int id); } } diff --git a/DMS.Application/Services/VariableTableAppService.cs b/DMS.Application/Services/VariableTableAppService.cs index 01318e7..630e7d9 100644 --- a/DMS.Application/Services/VariableTableAppService.cs +++ b/DMS.Application/Services/VariableTableAppService.cs @@ -106,11 +106,30 @@ namespace DMS.Application.Services /// 异步更新变量表。 /// /// 要更新的变量表数据传输对象。 - /// 表示异步操作的任务。 - public async Task UpdateVariableTableAsync(VariableTableDto variableTableDto) + /// 受影响的行数。 + /// 如果找不到变量表。 + public async Task UpdateVariableTableAsync(VariableTableDto variableTableDto) { - var variableTable = _mapper.Map(variableTableDto); - await _repositoryManager.VariableTables.UpdateAsync(variableTable); + try + { + await _repositoryManager.BeginTranAsync(); + var variableTable = await _repositoryManager.VariableTables.GetByIdAsync(variableTableDto.Id); + if (variableTable == null) + { + throw new ApplicationException($"VariableTable with ID {variableTableDto.Id} not found."); + } + + _mapper.Map(variableTableDto, variableTable); + int res = await _repositoryManager.VariableTables.UpdateAsync(variableTable); + await _repositoryManager.CommitAsync(); + return res; + } + catch (Exception ex) + { + await _repositoryManager.RollbackAsync(); + // 可以在此记录日志 + throw new ApplicationException($"更新变量表时发生错误,操作已回滚,错误信息:{ex.Message}", ex); + } } /// diff --git a/DMS.Infrastructure.UnitTests/Services/VariableTableAppServiceTest.cs b/DMS.Infrastructure.UnitTests/Services/VariableTableAppServiceTest.cs index b94c96f..d3b6fc0 100644 --- a/DMS.Infrastructure.UnitTests/Services/VariableTableAppServiceTest.cs +++ b/DMS.Infrastructure.UnitTests/Services/VariableTableAppServiceTest.cs @@ -52,4 +52,34 @@ public class VariableTableAppServiceTest : BaseServiceTest var deletedTable = await _variableTableAppService.GetVariableTableByIdAsync(createdVariableTable.Id); Assert.Null(deletedTable); } + + [Fact] + public async Task UpdateVariableTableAsyncTest() + { + // Arrange: Create a variable table first + var createDto = new CreateVariableTableWithMenuDto() + { + VariableTable = FakerHelper.FakeVariableTableDto(), + Menu = FakerHelper.FakeCreateMenuDto(), + DeviceId = 5 // Assuming a device with ID 5 exists for testing + }; + var createdVariableTable = await _variableTableAppService.CreateVariableTableAsync(createDto); + Assert.NotEqual(createdVariableTable.Id, 0); + + // Modify some properties of the DTO + createdVariableTable.Name = "Updated Variable Table Name"; + createdVariableTable.Description = "This is an updated description."; + + // Act: Update the variable table + var affectedRows = await _variableTableAppService.UpdateVariableTableAsync(createdVariableTable); + + // Assert: Verify update was successful + Assert.Equal(1, affectedRows); + + // Retrieve the updated variable table to confirm changes + var updatedTable = await _variableTableAppService.GetVariableTableByIdAsync(createdVariableTable.Id); + Assert.NotNull(updatedTable); + Assert.Equal("Updated Variable Table Name", updatedTable.Name); + Assert.Equal("This is an updated description.", updatedTable.Description); + } } \ No newline at end of file