public async Task<bool> DeleteFolder(Folder folder)
{
if (folder.SubFolders.Any())
{
foreach (Folder f in folder.SubFolders)
{
await DeleteFolder(f);
}
}
if (folder.Files.Any())
{
foreach (Core.Domain.Entities.File file in folder.Files)
{
DisconnectAndNullifyMetadataAndSharing(file);
_db.Files.Remove(file);
}
}
folder.ParentFolder = null;
folder.ParentFolderId = null;
DisconnectAndNullifyMetadataAndSharing(folder);
_db.Folders.Remove(folder);
return await _db.SaveChangesAsync() > 0;
}
// Utility Function
private void DisconnectAndNullifyMetadataAndSharing(BaseForFileFolder entity)
{
if (entity.Metadata != null)
{
Metadata metadata = entity.Metadata;
metadata.File = null;
entity.Metadata = null;
entity.MetadataId = null;
}
if (entity.Sharing != null)
{
Sharing sharing = entity.Sharing;
sharing.File = null;
entity.Sharing = null;
entity.SharingId = null;
}
}
public async Task<bool> DeleteFolder(Folder folder)
{
if (folder.SubFolders.Any())
{
foreach (Folder f in folder.SubFolders)
{
await DeleteFolder(f);
}
}
if (folder.Files.Any())
{
foreach (Core.Domain.Entities.File file in folder.Files)
{
DisconnectAndNullifyMetadataAndSharing(file);
_db.Files.Remove(file);
}
}
folder.ParentFolder = null;
folder.ParentFolderId = null;
DisconnectAndNullifyMetadataAndSharing(folder);
_db.Folders.Remove(folder);
return await _db.SaveChangesAsync() > 0;
}
// Utility Function
private void DisconnectAndNullifyMetadataAndSharing(BaseForFileFolder entity)
{
if (entity.Metadata != null)
{
Metadata metadata = entity.Metadata;
metadata.File = null;
entity.Metadata = null;
entity.MetadataId = null;
}
if (entity.Sharing != null)
{
Sharing sharing = entity.Sharing;
sharing.File = null;
entity.Sharing = null;
entity.SharingId = null;
}
}