static void Main(string[] args)
        {
            Console.WriteLine("Hello World Entity Framework Core!");

            using (var context = new VideoGamesDatabaseContext())
            {
                // Migrate the database
                context.Database.Migrate();

                //delete all previous entitiies
                foreach (var videoGame in context.VideoGames)
                {
                    context.Remove(videoGame);
                }
                context.SaveChanges();
            }

            var results = new List <ExecutionResult>();

            results.Add(MeasureDelete("All 500 entities", 500, vg => true));
            results.Add(MeasureDelete("All 500 entities 2", 500, vg => true));
            results.Add(MeasureDelete("500 entities, year > 250", 500, vg => vg.ReleaseYear > 250));
            results.Add(MeasureDelete("All 2000 entities", 2000, vg => true));
            results.Add(MeasureDelete("2000 entities, year > 1000", 2000, vg => vg.ReleaseYear > 1000));
            results.Add(MeasureDelete("All 10000 entities", 10000, vg => vg.ReleaseYear > 1000));
            results.Add(MeasureDelete("10000 entities, year > 5000", 10000, vg => vg.ReleaseYear > 5000));

            Console.WriteLine("No batch(ms)   Batch(ms)    Title");
            Console.WriteLine(string.Join("\n", results));
        }
        static ExecutionResult MeasureDelete(string title, int count, Func <VideoGame, bool> predicate)
        {
            TimeSpan duration;
            DateTime start;
            var      result = new ExecutionResult();

            result.Title = title;

            FillDatabase(count);

            Console.WriteLine("Start classic delete");

            using (var context = new VideoGamesDatabaseContext())
            {
                start = DateTime.Now;
                //delete all previous entitiies
                foreach (var videoGame in context.VideoGames.Where(predicate))
                {
                    context.Remove(videoGame);
                }
                context.SaveChanges();
                duration = DateTime.Now - start;
            }

            result.ClassicTime = duration.TotalMilliseconds;
            Console.WriteLine($"Finished classic delete time {duration.Ticks}");

            FillDatabase(count);

            Console.WriteLine("Starting batch delete");

            using (var context = new VideoGamesDatabaseContext())
            {
                start = DateTime.Now;
                var res = context.VideoGames.Where(vg => predicate(vg)).Delete(x => x.BatchSize = 500);
                //no need to save context
                duration = DateTime.Now - start;
            }

            result.BatchTime = duration.TotalMilliseconds;
            Console.WriteLine($"Finished batch delete time {duration.Ticks}");

            return(result);
        }