From 1af9fa56bc8ef5d6dfedce12f6fd548d567309f2 Mon Sep 17 00:00:00 2001 From: zuohuaijun Date: Thu, 5 Jun 2025 13:54:54 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=98=8E=E5=A2=9E=E5=8A=A0=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E5=AE=9E=E4=BD=93=E4=B8=8E=E6=96=87=E4=BB=B6=E5=85=B3?= =?UTF-8?q?=E8=81=94=E6=97=B6=E7=BB=9F=E4=B8=80=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/File/SysFileService.cs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs index 5c5f715b..82221aea 100644 --- a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs +++ b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs @@ -344,4 +344,44 @@ public class SysFileService : IDynamicApiController, ITransient } return sysFile; } + + #region 统一实体与文件关联时,业务应用实体只需要定义一个SysFile集合导航属性,业务增加和更新、删除分别调用即可 + + /// + /// 更新文件的业务数据Id + /// + /// + /// + /// + [NonAction] + public async Task UpdateFileByDataId(long dataId, List sysFiles) + { + var newFileIds = sysFiles.Select(u => u.Id).ToList(); + + // 求文件Id差集并删除(无效文件) + var tmpFiles = await _sysFileRep.GetListAsync(u => u.DataId == dataId); + var tmpFileIds = tmpFiles.Select(u => u.Id).ToList(); + var deleteFileIds = tmpFileIds.Except(newFileIds); + foreach (var fileId in deleteFileIds) + await DeleteFile(new DeleteFileInput() { Id = fileId }); + + await _sysFileRep.UpdateAsync(u => new SysFile() { DataId = dataId }, u => newFileIds.Contains(u.Id)); + } + + /// + /// 删除业务数据对应的文件 + /// + /// + /// + [NonAction] + public async Task DeteleFileByDataId(long dataId) + { + // 删除冗余无效的物理文件 + var tmpFiles = await _sysFileRep.GetListAsync(u => u.DataId == dataId); + foreach (var file in tmpFiles) + await _customFileProvider.DeleteFileAsync(file); + await _sysFileRep.AsDeleteable().Where(u => u.DataId == dataId).ExecuteCommandAsync(); + } + + #endregion 统一实体与文件关联时,业务应用实体只需要定义一个SysFile集合导航属性,业务增加和更新、删除分别调用即可 } \ No newline at end of file