Prevent Seed from duplicating data

1

I'm using this code in Seed to generate values in my table, so I do not have to type in the database, when I change something in my code and need to give an update in the database, so it is not running, , the code below is for adding or updating the information, but it is just adding the values, and with that it is doubling.

  

context.AddOrUpdate (x => x.StateID, state);

The Seed method is as follows ...

    internal sealed class Configuration : DbMigrationsConfiguration<Tribus.Models.Context>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
        }

    protected override void Seed(Tribus.Models.Context context)
    {
        IList<Estado> estados = new List<Estado>();
        estados.Add(new Estado() { Nome = "Acre", Sigla = "AC" });
        estados.Add(new Estado() { Nome = "Alagoas", Sigla = "AL" });
        estados.Add(new Estado() { Nome = "Amapá", Sigla = "AP" });
        estados.Add(new Estado() { Nome = "Amazonas", Sigla = "AM" });
        estados.Add(new Estado() { Nome = "Bahia", Sigla = "BA" });
        estados.Add(new Estado() { Nome = "Ceará", Sigla = "CE" });
        estados.Add(new Estado() { Nome = "Distrito Federal", Sigla = "DF" });
        estados.Add(new Estado() { Nome = "Espírito Santo", Sigla = "ES" });
        estados.Add(new Estado() { Nome = "Goiás", Sigla = "GO" });
        estados.Add(new Estado() { Nome = "Maranhão", Sigla = "MA" });
        estados.Add(new Estado() { Nome = "Mato Grosso", Sigla = "MT" });
        estados.Add(new Estado() { Nome = "Mato Grosso do Sul", Sigla = "MS" });
        estados.Add(new Estado() { Nome = "Minas Gerais", Sigla = "MG" });
        estados.Add(new Estado() { Nome = "Pará", Sigla = "PA" });
        estados.Add(new Estado() { Nome = "Paraíba", Sigla = "PB" });
        estados.Add(new Estado() { Nome = "Paraná", Sigla = "PR" });
        estados.Add(new Estado() { Nome = "Pernambuco", Sigla = "PE" });
        estados.Add(new Estado() { Nome = "Piauí", Sigla = "PI" });
        estados.Add(new Estado() { Nome = "Rio de Janeiro", Sigla = "RJ" });
        estados.Add(new Estado() { Nome = "Rio Grande do Norte", Sigla = "RN" });
        estados.Add(new Estado() { Nome = "Rio Grande do Sul", Sigla = "RS" });
        estados.Add(new Estado() { Nome = "Rondônia", Sigla = "RO" });
        estados.Add(new Estado() { Nome = "Roraima", Sigla = "RR" });
        estados.Add(new Estado() { Nome = "Santa Catarina", Sigla = "SC" });
        estados.Add(new Estado() { Nome = "São Paulo", Sigla = "SP" });
        estados.Add(new Estado() { Nome = "Sergipe", Sigla = "SE" });
        estados.Add(new Estado() { Nome = "Tocantins", Sigla = "TO" });
        foreach (Estado estado in estados)
        {
            context.Estados.AddOrUpdate(x => x.EstadoID, estado);
        }
        context.SaveChanges();
    }
    
asked by anonymous 08.11.2016 / 02:22

2 answers

0

With the help of @TobyMosque I was able to understand the workings of what I was doing, which was also right, but the data verifier, was by ID and not by name. so I did the following:

protected override void Seed(Tribus.Models.Context context)
{
      IList<Estado> estados = new List<Estado>();
      estados.Add(new Estado() { Nome = "Acre", Sigla = "AC" });
      estados.Add(new Estado() { Nome = "Alagoas", Sigla = "AL" });
      estados.Add(new Estado() { Nome = "Amapá", Sigla = "AP" });
      estados.Add(new Estado() { Nome = "Amazonas", Sigla = "AM" });
      estados.Add(new Estado() { Nome = "Bahia", Sigla = "BA" });
      estados.Add(new Estado() { Nome = "Ceará", Sigla = "CE" });
      estados.Add(new Estado() { Nome = "Distrito Federal", Sigla = "DF" });
      estados.Add(new Estado() { Nome = "Espírito Santo", Sigla = "ES" });
      estados.Add(new Estado() { Nome = "Goiás", Sigla = "GO" });
      estados.Add(new Estado() { Nome = "Maranhão", Sigla = "MA" });
      estados.Add(new Estado() { Nome = "Mato Grosso", Sigla = "MT" });
      estados.Add(new Estado() { Nome = "Mato Grosso do Sul", Sigla = "MS" });
      estados.Add(new Estado() { Nome = "Minas Gerais", Sigla = "MG" });
      estados.Add(new Estado() { Nome = "Pará", Sigla = "PA" });
      estados.Add(new Estado() { Nome = "Paraíba", Sigla = "PB" });
      estados.Add(new Estado() { Nome = "Paraná", Sigla = "PR" });
      estados.Add(new Estado() { Nome = "Pernambuco", Sigla = "PE" });
      estados.Add(new Estado() { Nome = "Piauí", Sigla = "PI" });
      estados.Add(new Estado() { Nome = "Rio de Janeiro", Sigla = "RJ" });
      estados.Add(new Estado() { Nome = "Rio Grande do Norte", Sigla = "RN" });
      estados.Add(new Estado() { Nome = "Rio Grande do Sul", Sigla = "RS" });
      estados.Add(new Estado() { Nome = "Rondônia", Sigla = "RO" });
      estados.Add(new Estado() { Nome = "Roraima", Sigla = "RR" });
      estados.Add(new Estado() { Nome = "Santa Catarina", Sigla = "SC" });
      estados.Add(new Estado() { Nome = "São Paulo", Sigla = "SP" });
      estados.Add(new Estado() { Nome = "Sergipe", Sigla = "SE" });
      estados.Add(new Estado() { Nome = "Tocantins", Sigla = "TO" });
      foreach (Estado estado in estados)
      {
            context.Estados.AddOrUpdate(x => x.Sigla, estado);
      }
      context.SaveChanges();
}

In case I just changed

foreach (Estado estado in estados)
{
     context.Estados.AddOrUpdate(x => x.EstadoID, estado);
}

for

foreach (Estado estado in estados)
{
     context.Estados.AddOrUpdate(x => x.Sigla, estado);
}

Changing the x.EstadoID to x.Sigla because what checks in the bank is part of it.

    
10.11.2016 / 18:04
1

Fabio, for AddOrUpdate to work correctly, you need to enter the fields you will use to make the comparison, and your entities need to have these fields declared.

So you have two options.:

1. Add the EstadoID property to your entities.:

context.Estados.AddOrUpdate(
    x => x.EstadoID, 
    new Estado() { EstadoID = 1, Nome = "Acre", Sigla = "AC" },
    new Estado() { EstadoID = 2, Nome = "Alagoas", Sigla = "AL" },
    new Estado() { EstadoID = 3, Nome = "Amapá", Sigla = "AP" },
    new Estado() { EstadoID = 4, Nome = "Amazonas", Sigla = "AM" },
    new Estado() { EstadoID = 5, Nome = "Bahia", Sigla = "BA" },
    new Estado() { EstadoID = 6, Nome = "Ceará", Sigla = "CE" },
    new Estado() { EstadoID = 7, Nome = "Distrito Federal", Sigla = "DF" },
    new Estado() { EstadoID = 8, Nome = "Espírito Santo", Sigla = "ES" },
    new Estado() { EstadoID = 9, Nome = "Goiás", Sigla = "GO" },
    new Estado() { EstadoID = 10, Nome = "Maranhão", Sigla = "MA" },
    new Estado() { EstadoID = 11, Nome = "Mato Grosso", Sigla = "MT" },
    new Estado() { EstadoID = 12, Nome = "Mato Grosso do Sul", Sigla = "MS" },
    new Estado() { EstadoID = 13, Nome = "Minas Gerais", Sigla = "MG" },
    new Estado() { EstadoID = 14, Nome = "Pará", Sigla = "PA" },
    new Estado() { EstadoID = 15, Nome = "Paraíba", Sigla = "PB" },
    new Estado() { EstadoID = 16, Nome = "Paraná", Sigla = "PR" },
    new Estado() { EstadoID = 17, Nome = "Pernambuco", Sigla = "PE" },
    new Estado() { EstadoID = 18, Nome = "Piauí", Sigla = "PI" },
    new Estado() { EstadoID = 19, Nome = "Rio de Janeiro", Sigla = "RJ" },
    new Estado() { EstadoID = 20, Nome = "Rio Grande do Norte", Sigla = "RN" },
    new Estado() { EstadoID = 21, Nome = "Rio Grande do Sul", Sigla = "RS" },
    new Estado() { EstadoID = 22, Nome = "Rondônia", Sigla = "RO" },
    new Estado() { EstadoID = 23, Nome = "Roraima", Sigla = "RR" },
    new Estado() { EstadoID = 24, Nome = "Santa Catarina", Sigla = "SC" },
    new Estado() { EstadoID = 25, Nome = "São Paulo", Sigla = "SP" },
    new Estado() { EstadoID = 26, Nome = "Sergipe", Sigla = "SE" },
    new Estado() { EstadoID = 27, Nome = "Tocantins", Sigla = "TO" }
);

2. Use Nome or Sigla as comparison property

context.Estados.AddOrUpdate(
    x => x.Nome, 
    new Estado() { Nome = "Acre", Sigla = "AC" },
    new Estado() { Nome = "Alagoas", Sigla = "AL" },
    new Estado() { Nome = "Amapá", Sigla = "AP" },
    new Estado() { Nome = "Amazonas", Sigla = "AM" },
    new Estado() { Nome = "Bahia", Sigla = "BA" },
    new Estado() { Nome = "Ceará", Sigla = "CE" },
    new Estado() { Nome = "Distrito Federal", Sigla = "DF" },
    new Estado() { Nome = "Espírito Santo", Sigla = "ES" },
    new Estado() { Nome = "Goiás", Sigla = "GO" },
    new Estado() { Nome = "Maranhão", Sigla = "MA" },
    new Estado() { Nome = "Mato Grosso", Sigla = "MT" },
    new Estado() { Nome = "Mato Grosso do Sul", Sigla = "MS" },
    new Estado() { Nome = "Minas Gerais", Sigla = "MG" },
    new Estado() { Nome = "Pará", Sigla = "PA" },
    new Estado() { Nome = "Paraíba", Sigla = "PB" },
    new Estado() { Nome = "Paraná", Sigla = "PR" },
    new Estado() { Nome = "Pernambuco", Sigla = "PE" },
    new Estado() { Nome = "Piauí", Sigla = "PI" },
    new Estado() { Nome = "Rio de Janeiro", Sigla = "RJ" },
    new Estado() { Nome = "Rio Grande do Norte", Sigla = "RN" },
    new Estado() { Nome = "Rio Grande do Sul", Sigla = "RS" },
    new Estado() { Nome = "Rondônia", Sigla = "RO" },
    new Estado() { Nome = "Roraima", Sigla = "RR" },
    new Estado() { Nome = "Santa Catarina", Sigla = "SC" },
    new Estado() { Nome = "São Paulo", Sigla = "SP" },
    new Estado() { Nome = "Sergipe", Sigla = "SE" },
    new Estado() { Nome = "Tocantins", Sigla = "TO" }
)
    
08.11.2016 / 03:10