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