Seed Method for Many-to-Many Relationships

Asked

Viewed 83 times

0

I am developing a simple application in MVC using Entity, being of registration of products, I am using the metodo seed to insert the values in the table, but in the relationship Many-to-Many I cannot set the values in the auxiliary table that was created, which procedure should I do? Follows the codes used:

Classe Produto:

    public int ProdutoID { get; set; }
    public string Nome { get; set; }
    public string Descricao { get; set; }
    public string Fabricante { get; set; }
    public string Codigo_Barras { get; set; }
    public string Tamanho { get; set; }
    public bool Novo { get; set; }

    //Relacionamentos
    public virtual ICollection<SubCategoria> SubCategorias { get; set; }

Subcategoria:

    public int SubCategoriaID { get; set; }
    public string Nome { get; set; }

    //Relacionamentos
    public int CategoriaID { get; set; }
    public virtual Categoria Categoria { get; set; }

    public virtual ICollection<Produto> Produtos { get; set; }

Metodo Seed:

IList<SubCategoria> subCategorias = new List<SubCategoria>();
        subCategorias.Add(new SubCategoria() { Nome = "Vestuários", CategoriaID = 1 });
        subCategorias.Add(new SubCategoria() { Nome = "Calçados", CategoriaID = 1 });
        subCategorias.Add(new SubCategoria() { Nome = "Eletrodomésticos", CategoriaID = 1 });
        subCategorias.Add(new SubCategoria() { Nome = "Eletronicos", CategoriaID = 1 });
        subCategorias.Add(new SubCategoria() { Nome = "Medicamentos", CategoriaID = 1 });
        subCategorias.Add(new SubCategoria() { Nome = "Pet", CategoriaID = 1 });
        subCategorias.Add(new SubCategoria() { Nome = "Informática", CategoriaID = 1 });
        foreach (SubCategoria subCategoria in subCategorias)
        {
            context.SubCategorias.AddOrUpdate(x => x.Nome, subCategoria);
        }
        context.SaveChanges();

        IList<Produto> produtos = new List<Produto>();
        produtos.Add(new Produto() { Nome = "Camiseta Regata", Descricao = "Camiseta Regata Masculina", Tamanho = "P", Fabricante = "Rikwill", Novo = true, Codigo_Barras = "78985211452" });
        produtos.Add(new Produto() { Nome = "Addidas Neo", Descricao = "Tênis Addidas Neo 2017", Tamanho = "42", Fabricante = "Addidas", Novo = true, Codigo_Barras = "78985284252" });
        produtos.Add(new Produto() { Nome = "Geladeira Eletrolux", Descricao = "Geladeira Eletrolux 432 Litros Inox 2015", Tamanho = "432 L", Fabricante = "Eletrolux", Novo = true, Codigo_Barras = "78524211452" });
        produtos.Add(new Produto() { Nome = "Televisão 32 Pol Bustter", Descricao = "Televisão de 32 Poletadas Bustter Double Digital 3 HDMI + 1 USB + Conversor Digital Integrado", Tamanho = "32\"", Fabricante = "Bustter", Novo = false, Codigo_Barras = "Não Possui" });
        produtos.Add(new Produto() { Nome = "Buscofen 4 Mg", Descricao = "Buscofen Sem Cólicas 4 Mg", Tamanho = "10 caps", Fabricante = "Buscopan Laboratórios", Novo = true, Codigo_Barras = "78983424252" });
        produtos.Add(new Produto() { Nome = "Ração Cadelinha Feliz", Descricao = "Ração Cadelinha Feliz com Multi-proteínas", Tamanho = "1 Kg", Fabricante = "Canino Louco", Novo = true, Codigo_Barras = "78251524525" });
        produtos.Add(new Produto() { Nome = "Roteador Intelbras RB400", Descricao = "Roteador Intelbras RB400 700 Mbps 3 antenas", Tamanho = "1 Unidade", Fabricante = "Intelbras", Novo = false, Codigo_Barras = "Não Possui" });
        foreach (Produto produto in produtos)
        {
            context.Produtos.AddOrUpdate(x => x.Nome, produto);
        }
        context.SaveChanges();

code that determines the relationship in OnModelCreating:

modelBuilder.Entity<Produto>().HasMany<SubCategoria>(s => s.SubCategorias).WithMany(c => c.Produtos).Map(cs =>
        {
            cs.MapLeftKey("ProdutoRefId");
            cs.MapRightKey("SubCategoriaRefId");
            cs.ToTable("ProdutoSubCategoria");
        });

How to set the values in the table produtosubcategoria which was created by OnModelCreating ?

In this case, I wanted to say that product 1 contains subcategory 1, product 2, subcategory 2, and so on...

1 answer

0

You have to list your products and subcategories in the Seed method by adding the subcategories in the product list

var produto = new Produto();
var subcategoria = new SubCategoria():    
produto.SubCategorias.Add(subcategoria);
context.Produtos.Add(produto);
context.SaveChanges();

This is enough for the EF to create the relation in the shared table.

  • i could not do : when I type product.Subcategory of error...

  • Which error appears?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.