private static void SeedData(TournamentDbContext ctx)
        {
            //ctx.Users.FirstOrDefault(a => a.Id == 1);

            AddEnumEntitiesTo(ctx);

            AddTeamsTo(ctx);
        }
        public static void Initialize(TournamentDbContext ctx)
        {
            ctx.Database.EnsureDeleted();
            ctx.Database.EnsureCreated();
            ctx.SaveChanges();

            SeedData(ctx);

            ctx.SaveChanges();
        }
        private static void AddEnumEntitiesTo(TournamentDbContext ctx)
        {
            var types = Assembly.GetAssembly(typeof(Entity)).ExportedTypes;
            var enumEntityFactoryTypes = types.Where(type => !type.IsAbstract && type.BaseType.IsConstructedGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EnumEntityFactory <,>));

            foreach (var enumEntityFactoryType in enumEntityFactoryTypes)
            {
                var enumEntityFactory = enumEntityFactoryType.GetProperty("Instance").GetValue(null, null);

                if (enumEntityFactoryType.GetProperty("Entities").GetValue(enumEntityFactory) is IEnumerable <EnumEntity> entities)
                {
                    try
                    {
                        ctx.AddRange(entities);
                    }
                    catch (Exception)
                    {
                        // Ignore exceptions caused by duplicate entities.
                    }
                }
            }
        }
 private static void AddTeamsTo(TournamentDbContext ctx)
 {
     AddTeam(ctx, new Team {
         TeamId = 64114, Name = "Skënderbeu", Country = Country.Albania, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 62180, Name = "FC Santa Coloma", Country = Country.Andorra, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 77866, Name = "Banants", Country = Country.Armenia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50030, Name = "Salzburg", Country = Country.Austria, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 60609, Name = "Qarabağ", Country = Country.Azerbaijan, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 66168, Name = "BATE", Country = Country.Belarus, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50074, Name = "Anderlecht", Country = Country.Belgium, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52165, Name = "Standard Liège", Country = Country.Belgium, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 73390, Name = "Zrinjski", Country = Country.BosniaAndHerzegovina, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 2603104, Name = "Ludogorets", Country = Country.Bulgaria, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50164, Name = "Dinamo Zagreb", Country = Country.Croatia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50118, Name = "APOEL", Country = Country.Cyprus, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52800, Name = "AEL", Country = Country.Cyprus, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50033, Name = "Sparta Praha", Country = Country.CzechRepublic, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52709, Name = "København", Country = Country.Denmark, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 54186, Name = "AaB", Country = Country.Denmark, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 7889, Name = "Liverpool", Country = Country.England, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52280, Name = "Arsenal", Country = Country.England, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 52914, Name = "Chelsea", Country = Country.England, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 52919, Name = "Man. City", Country = Country.England, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 77482, Name = "Levadia", Country = Country.Estonia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 59025, Name = "HB", Country = Country.FaroeIslands, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50052, Name = "HJK", Country = Country.Finland, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50023, Name = "Monaco", Country = Country.France, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 52747, Name = "Paris", Country = Country.France, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 75797, Name = "LOSC", Country = Country.France, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 69601, Name = "Rabotnicki", Country = Country.FYRMacedonia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52705, Name = "Dinamo Tbilisi", Country = Country.Georgia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50037, Name = "Bayern", Country = Country.Germany, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 50109, Name = "Leverkusen", Country = Country.Germany, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 52758, Name = "Dortmund", Country = Country.Germany, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 57388, Name = "Schalke", Country = Country.Germany, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 2605572, Name = "Lincoln", Country = Country.Gibraltar, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 2610, Name = "Olympiacos", Country = Country.Greece, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50084, Name = "Panathinaikos", Country = Country.Greece, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52958, Name = "Debrecen", Country = Country.Hungary, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52307, Name = "KR", Country = Country.Iceland, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 57477, Name = "M. Tel-Aviv", Country = Country.Israel, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50136, Name = "Napoli", Country = Country.Italy, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50137, Name = "Roma", Country = Country.Italy, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50139, Name = "Juventus", Country = Country.Italy, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 79973, Name = "Aktobe", Country = Country.Kazakhstan, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 64359, Name = "Ventspils", Country = Country.Latvia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 2602334, Name = "Žalgiris", Country = Country.Lithuania, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 59028, Name = "Dudelange", Country = Country.Luxembourg, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52641, Name = "Valletta", Country = Country.Malta, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 69606, Name = "Sheriff", Country = Country.Moldova, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 73936, Name = "Sutjeska", Country = Country.Montenegro, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50143, Name = "Ajax", Country = Country.Netherlands, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52749, Name = "Feyenoord", Country = Country.Netherlands, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52991, Name = "Cliftonville", Country = Country.NorthernIreland, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 57485, Name = "Strømsgodset", Country = Country.Norway, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50146, Name = "Legia", Country = Country.Poland, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50064, Name = "Porto", Country = Country.Portugal, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 50147, Name = "Benfica", Country = Country.Portugal, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50149, Name = "Sporting", Country = Country.Portugal, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50133, Name = "St Patrick's", Country = Country.RepublicOfIreland, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50065, Name = "Steaua", Country = Country.Romania, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52826, Name = "Zenit", Country = Country.Russia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 54266, Name = "CSKA Moskva", Country = Country.Russia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 64508, Name = "La Fiorita", Country = Country.SanMarino, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50050, Name = "Celtic", Country = Country.Scotland, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50162, Name = "Partizan", Country = Country.Serbia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52797, Name = "Slovan Bratislava", Country = Country.Slovakia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 57490, Name = "Maribor", Country = Country.Slovenia, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50051, Name = "Real Madrid", Country = Country.Spain, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 50080, Name = "Barcelona", Country = Country.Spain, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 50124, Name = "Atlético", Country = Country.Spain, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 50125, Name = "Athletic", Country = Country.Spain, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50152, Name = "Malmö", Country = Country.Sweden, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50004, Name = "Grasshoppers", Country = Country.Switzerland, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 59856, Name = "Basel", Country = Country.Switzerland, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 50067, Name = "Galatasaray", Country = Country.Turkey, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50157, Name = "Beşiktaş", Country = Country.Turkey, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 50158, Name = "Dnipro", Country = Country.Ukraine, AreEliminated = true
     });
     AddTeam(ctx, new Team {
         TeamId = 52707, Name = "Shakhtar Donetsk", Country = Country.Ukraine, AreEliminated = false
     });
     AddTeam(ctx, new Team {
         TeamId = 60457, Name = "TNS", Country = Country.Wales, AreEliminated = true,
     });
 }
 private static bool DatabaseIsAlreadyPopulated(TournamentDbContext ctx)
 {
     return(ctx.Teams.Any());
 }
 private static void AddTeam(TournamentDbContext ctx, Team team)
 {
     _ = ctx.Add(team).Entity;
 }