Пример #1
0
        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;
        }