Working with Seed Method + FK

3

I'm finding it difficult to work with the Seed method, since I registered the state, and then wanted to register the cities, and then I can not reference the state in the city, what could I do? I believe you have a solution.

Seed Method

namespace Projeto.Migrations
{
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;
    using Projeto.Models;

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

        protected override void Seed(Projeto.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);
            }

            IList<Cidade> cidades = new List<Cidade>();
            cidades.Add(new Cidade() { Nome = "Aparecida", Estado = "SP" });
            cidades.Add(new Cidade() { Nome = "Guaratinguetá", Estado = 25 });
            cidades.Add(new Cidade() { Nome = "Roseira", Estado = 25 });
            cidades.Add(new Cidade() { Nome = "Lorena", Estado = "25" });
            cidades.Add(new Cidade() { Nome = "Taubaté", Estado = "São Paulo" });
            cidades.Add(new Cidade() { Nome = "Caçapava", Estado = "25" });
            cidades.Add(new Cidade() { Nome = "Pindamonhangaba Federal", Estado = "25" });
            cidades.Add(new Cidade() { Nome = "Potim", Estado = "25" });
            cidades.Add(new Cidade() { Nome = "São José dos Campos", Estado = "25" });
            cidades.Add(new Cidade() { Nome = "Tremembé", Estado = "25" });
            foreach (Cidade cidade in cidades)
            {
                context.Cidades.AddOrUpdate(x => x.CidadeID, cidade);
            }
        }
    }
}

State class

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace Projeto.Models
{
    public class Estado
    {
        [Key]
        public int EstadoID { get; set; }

        [Required(ErrorMessage = "Preencha o nome do estado")]
        [DisplayName("Estado")]
        [StringLength(50, MinimumLength = 3, ErrorMessage = "O Estado deve ter de 3 a 50 caracteres.")]
        public string Nome { get; set; }

        [Required(ErrorMessage = "Preencha a sigla")]
        [DisplayName("Sigla")]
        [StringLength(2, MinimumLength = 2, ErrorMessage = "A sigla deve ter de 2 caracteres.")]
        public string Sigla { get; set; }

        //Relacionamentos
        public virtual ICollection<Cidade> Cidades { get; set; }

    }
}

Class City

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace Projeto.Models
{
    public class Cidade
    {
        [Key]
        public int CidadeID { get; set; }

        [Required(ErrorMessage = "Preencha o ")]
        [DisplayName("Nome")]
        [StringLength(50, MinimumLength = 3, ErrorMessage = " deve ter de 3 a 50 caracteres.")]
        public string Nome { get; set; }

        ////Relacionamentos
        [DisplayName("Estado")]
        public int EstadoID { get; set; }
        public virtual Estado Estado { get; set; }

        public virtual ICollection<Local> Locais { get; set; }

    }
}

Error:

  

Class Syystem.String   Represents text as a series of Unicode characters.

     

Error:
  Can not implicitly convert type 'string' to   'Design.Models.Estado'

obs: I already tried to convert Convert.ToInt32(25)

    
asked by anonymous 29.10.2016 / 00:07

2 answers

3

First save the states:

    protected override void Seed(Projeto.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();

Then select the state and use it to assign the foreign key.

        var saoPaulo = context.Estados.FirstOrDefault(e => e.Sigla == "SP");

        IList<Cidade> cidades = new List<Cidade>();
        cidades.Add(new Cidade() { Nome = "Aparecida", EstadoId = saoPaulo.EstadoId });
        cidades.Add(new Cidade() { Nome = "Guaratinguetá", EstadoId = saoPaulo.EstadoId });
        cidades.Add(new Cidade() { Nome = "Roseira", EstadoId = saoPaulo.EstadoId });
        cidades.Add(new Cidade() { Nome = "Lorena", EstadoId = saoPaulo.EstadoId });
        cidades.Add(new Cidade() { Nome = "Taubaté", EstadoId = saoPaulo.EstadoId });
        cidades.Add(new Cidade() { Nome = "Caçapava", EstadoId = saoPaulo.EstadoId });
        cidades.Add(new Cidade() { Nome = "Pindamonhangaba Federal", EstadoId = saoPaulo.EstadoId });
        cidades.Add(new Cidade() { Nome = "Potim", EstadoId = saoPaulo.EstadoId });
        cidades.Add(new Cidade() { Nome = "São José dos Campos", saoPaulo.EstadoId });
        cidades.Add(new Cidade() { Nome = "Tremembé", EstadoId = saoPaulo.EstadoId });
        foreach (Cidade cidade in cidades)
        {
            context.Cidades.AddOrUpdate(x => x.CidadeID, cidade);
        }

        context.SaveChanges();
    
29.10.2016 / 00:22
1

Well, I got it sorted out. I've done the following:

I removed the state of São Paulo from the list of states

and in the city I instanciei a new state and assign the specifications, with this saved the state São Paulo in the database:

IList<Cidade> cidades = new List<Cidade>();
    Estado SaoPaulo = new Estado();

    SaoPaulo.EstadoID = 27;
    SaoPaulo.Nome = "São Paulo";
    SaoPaulo.Sigla = "SP";

    cidades.Add(new Cidade() { Nome = "Aparecida", Estado = SaoPaulo });
    cidades.Add(new Cidade() { Nome = "Guaratinguetá", Estado = SaoPaulo });
    cidades.Add(new Cidade() { Nome = "Roseira", Estado = SaoPaulo });
    cidades.Add(new Cidade() { Nome = "Lorena", Estado = SaoPaulo });
    cidades.Add(new Cidade() { Nome = "Taubaté", Estado = SaoPaulo });
    cidades.Add(new Cidade() { Nome = "Caçapava", Estado = SaoPaulo });
    cidades.Add(new Cidade() { Nome = "Pindamonhangaba Federal", Estado = SaoPaulo });
    cidades.Add(new Cidade() { Nome = "Potim", Estado = SaoPaulo });
    cidades.Add(new Cidade() { Nome = "São José dos Campos", Estado = SaoPaulo });
    cidades.Add(new Cidade() { Nome = "Tremembé", Estado = SaoPaulo });
    foreach (Cidade cidade in cidades)
    {
        context.Cidades.AddOrUpdate(x => x.CidadeID, cidade);
    }
    
29.10.2016 / 00:25