private async Task RemoveFolder(FolderDbItem folder, CancellationToken cancellationToken) { List <FolderDbItem> subFolders; int skip = 0; int limit = 1000; do { subFolders = await context.Folders .Where(x => x.ParentId == folder.Id && x.UserIdentity == folder.UserIdentity) .Take(limit) .Skip(skip) .ToListAsync(cancellationToken); foreach (var subFolder in subFolders) { await RemoveFolder(subFolder, cancellationToken); } skip += limit; }while (subFolders.Any()); context.Folders.Remove(folder); }
private static Folder ToModel(FolderDbItem dbItem) => new Folder( new FolderIdentity(dbItem.Id, dbItem.UserIdentity), dbItem.Name, dbItem.ParentId != null? new FolderIdentity(dbItem.ParentId.Value, dbItem.UserIdentity) : null, dbItem.ParentsPath.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(x => new FolderIdentity(new Guid(x), dbItem.UserIdentity)).ToList());