private static void DeleteWorld(VaultContext vaultContext, World world) { vaultContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; List <Type> typeJobs = new List <Type> { typeof(User), typeof(UserLog), typeof(Command), typeof(CurrentBuilding), typeof(CurrentVillage), typeof(CurrentVillageSupport), typeof(CurrentArmy), typeof(CommandArmy), typeof(CurrentPlayer), typeof(EnemyTribe), typeof(IgnoredReport), typeof(Report), typeof(ReportArmy), typeof(ReportBuilding), typeof(Transaction), typeof(Village), typeof(Player), typeof(Ally), typeof(Conquer), typeof(AccessGroup) }; Console.WriteLine("Deleting non-trivial datatypes..."); Console.WriteLine("Deleting UserUploadHistory entries..."); vaultContext.UserUploadHistory.RemoveRange(vaultContext.UserUploadHistory.Where(h => h.U.WorldId == world.Id)); vaultContext.SaveChanges(); var numJobsDone = 0; String JobsProgressMessage() => $"Deleting data for {world.Hostname} (id={world.Id}) ({numJobsDone}/{typeJobs.Count} done)"; using (var dataProgressBar = new ProgressBar(typeJobs.Count, JobsProgressMessage())) { foreach (var type in typeJobs) { using (var jobProgressBar = dataProgressBar.Spawn(1, "")) { Console.Out.Flush(); Thread.Sleep(100); DeleteForWorld(vaultContext, jobProgressBar, type, world.Id); } numJobsDone++; dataProgressBar.Tick(JobsProgressMessage()); } } Console.WriteLine("Deleting world settings..."); if (world.WorldSettings != null) { vaultContext.Remove(world.WorldSettings); vaultContext.SaveChanges(); } Console.WriteLine("Deleting world..."); vaultContext.Remove(world); vaultContext.SaveChanges(); Console.WriteLine("Deleted all data for {0}.", world.Hostname); vaultContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.TrackAll; }