public static void Delete(this MusicDb musicDb, MusicFile mf, DeleteContext context) { void clearRelatedEntities(MusicFile file) { musicDb.RemovePlaylistItems(file); var tags = file.IdTags.ToArray(); musicDb.IdTags.RemoveRange(tags); } clearRelatedEntities(mf); var track = mf.Track; track?.MusicFiles.Remove(mf); if (track?.MusicFiles.All(x => x.IsGenerated) ?? false) { foreach (var f in track.MusicFiles.ToArray()) { clearRelatedEntities(f); f.Track = null; track.MusicFiles.Remove(f); musicDb.MusicFiles.Remove(f); log.Information($"{context}: Musicfile [MF-{f.Id}] deleted: {f.File}"); } } if (track?.MusicFiles.Count() == 0) { musicDb.Delete(track, context); } musicDb.MusicFiles.Remove(mf); log.Information($"{context}: Musicfile [MF-{mf.Id}] deleted: {mf.File}"); }