What implementation would I use to initialize the data in the bank using 1: N relationship?

0

My intention is to initialize a SubCategoria , but it needs a Categoria first (1: N). I wanted to know what implementation I would use for this relationship to work fine in the database? I'm using the Seed method of EntityFramework.

Method Seed

protected override void Seed(Context context)
        {
            IList<Categoria> CategoriasInicialização = new List<Categoria>();
            IList<UnidadeDeMedida> UndMedidasInicialização = new List<UnidadeDeMedida>();
            IList<SubCategoria> SubCategoriaInicialização = new List<SubCategoria>();

            #region Inicialização das SubCategorias

            SubCategoriaInicialização.Add(new SubCategoria() { SubCategoriaNome = "Controlados" });

            foreach (var subCategorias in SubCategoriaInicialização)
                context.SubCategorias.Add(subCategorias);

            #endregion

            #region Inicialização das Categorias

            CategoriasInicialização.Add(new Categoria() { CategoriaNome = "Medicamentos" });
            CategoriasInicialização.Add(new Categoria() { CategoriaNome = "Generos Alimenticios" });
            CategoriasInicialização.Add(new Categoria() { CategoriaNome = "Materiais de Construção" });
            CategoriasInicialização.Add(new Categoria() { CategoriaNome = "Materiais Hospitalar" });
            CategoriasInicialização.Add(new Categoria() { CategoriaNome = "Materiais Odontologico" });

            foreach (var categorias in CategoriasInicialização)
                context.Categorias.Add(categorias);

            context.SaveChanges();
            base.Seed(context);
}

Subcategory mapping class

public SubCategoriaConfig()
        {
            ToTable("SubCategoria");
            HasKey(c => c.SubCategoriaId);

            Property(x => x.SubCategoriaNome)
                .IsRequired()
                .HasMaxLength(60);

            HasRequired(x => x.Categoria)
                .WithMany(x => x.SubCategorias)
                .Map(m => m.MapKey("CategoriaId"));
        }
    
asked by anonymous 18.01.2017 / 19:58

1 answer

1

If I understood your Models right, it would be something simpler:

var categorias= new List<Categoria>{
                         new Categoria{ CategoriaNome = "Medicamentos" },
                         new Categoria{ CategoriaNome = "Generos Alimenticios" },
                         new Categoria{ CategoriaNome = "Materiais de Construção" },
                         new Categoria{ CategoriaNome = "Materiais Hospitalar" },
                         new Categoria{ CategoriaNome = "Materiais Odontologico" }
};

    categorias.ForEach(x=> context.Categorias.Add(x));
    context.SaveChanges();


    var subCategorias= new List<SubCategoria>{
            new SubCategoria{ SubCategoriaNome = "Controlados", Categoria= categorias.FirstOrDefault(s => s.CategoriaNome.Equals("Medicamentos") },
            new SubCategoria{ SubCategoriaNome = "Controlados 2", Categoria= categorias.FirstOrDefault(s => s.CategoriaNome.Equals("Medicamentos") }
    };

        subCategorias.ForEach(s => context.SubCategoria.Add(s));
        context.SaveChanges();

      categorias[0].SubCategorias.Add(subcategorias[0]); 
      categorias[0].SubCategorias.Add(subcategorias[1]);

      context.SaveChanges();
    
18.01.2017 / 21:13