none
Como adicionar nova coluna na tabela criada por EF? RRS feed

  • Pergunta

  • Saudações... Tenho duas classes uma venda e outra produtos, estou usando entity framework relacionamento muitos para muitos, assim foi criado as tabelas venda, produtos e venda_produtos. Na tabela venda_produtos é a tabela que tem as fk das tabelas venda e produtos.... Gostaria de saber como adicionar uma nova coluna na tabela venda_produtos usando o entity framework, por exemplo, foi criado as coluna fk_venda e fk_produtos, eu queria adicionar a coluna quantidade, como fazer isso?

    Fico no aguardo. Obrigado.

    segunda-feira, 20 de novembro de 2017 02:25

Respostas

  • Olá!

    Exato, você teria que criar a tabela de relacionamento manualmente.. Eu não testei, mas de acordo com a sugestão daquele link que eu te enviei, o seu código deveria ficar parecido com este:

    public class Produtos
    {
        public int ProdutoID { get; set; }
    
    	// Colunas específicas do Produto...
    	// ...
    	// ...
    	
        public virtual ICollection<ProdutosVendas> ProdutosVendas { get; set; }
    }
    
    public class Vendas
    {
        public int VendaID { get; set; }
    
    	// Colunas específicas da Venda...
    	// ...
    	// ...
    
        public virtual ICollection<ProdutosVendas> ProdutosVendas { get; set; }
    }
    
    public class ProdutosVendas
    {
        [Key, Column(Order = 0)]
        public int ProdutoID { get; set; }
        [Key, Column(Order = 1)]
        public int VendaID { get; set; }
    
        public virtual Produtos Produto { get; set; }
        public virtual Vendas Venda { get; set; }
    
    	// Colunas adicionais do relacionamento...
    	// ...
    	// ...
    }


    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    terça-feira, 21 de novembro de 2017 05:24
    Moderador

Todas as Respostas

  • Olá,

    Para criar esse campo existe duas formas:

    1 - Você cria manualmente no banco de dados e faz o mapeamento em sua classe

    2 - Você cria a propriedade em sua classe em seu caso o campo Quantidade e gera uma migração.

    Dessa forma você terá o controle de versionamento e sua coluna na tabela desejada.

    Para criar uma migração você pode usar o Package Console do Visual Studio com o seguinte comando:

    Add-Migrations -name CriacaoCampoExemplo

    Depois

    Update-Database

    para maiores informações sobre como utilizar esses comandos deixarei o link da documentação para 

    EF6 e Entity Framework Core.

    https://docs.microsoft.com/pt-br/ef/core/

    https://docs.microsoft.com/pt-br/ef/efcore-and-ef6/


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Development Leader at JAMSOFT Informática
    Criador e Mantenedor do Entity Framework Core for Firebird
    Contribuidor do Entity Framework Core
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    segunda-feira, 20 de novembro de 2017 03:11
  • Olá!

    Caso você não consiga resolver com as dicas do Rafael, veja se esta thread do StackOverflow te ajuda:

    Create code first, many to many, with additional fields in association table

    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    segunda-feira, 20 de novembro de 2017 07:32
    Moderador
  • Bom dia. Obrigado pelo retorno. O situação do exemplo que mandou é igual a minha.... Vou explicar como eu fiz...

    Uso EF code first. Então fiz 2 classes uma vendas e outra produtos , as duas são de muitos para muitos. Na classe DBcontext informei assim 

        using Migrations;
        using System;
        using System.Data.Entity;
        using System.Linq;
    
        public class DeliveryContextAdr : DbContext
        {
            public DeliveryContextAdr()
                : base(nameOrConnectionString: "PgDeliveryAdr")
            {
                Database.SetInitializer(new MigrateDatabaseToLatestVersion<DeliveryContextAdr, Configuration>());
    
            } 
               
                
            public DbSet<Produtos> Produtos { get; set; }
            
    
                    public DbSet<Vendas> Vendas { get; set; }
        }    

    Então automaticamente foi criada 3 tabelas uma vendas, produtos e vendas_produtos... A minha duvida é como inserir nova coluna na venda_produtos.... pelo que eu vi no exemplo que vc me passou vou ter que criar uma classe VendasProdutos? Se caso sim como que fica o meu DBContetxt?

    segunda-feira, 20 de novembro de 2017 13:00
  • Olá!

    Exato, você teria que criar a tabela de relacionamento manualmente.. Eu não testei, mas de acordo com a sugestão daquele link que eu te enviei, o seu código deveria ficar parecido com este:

    public class Produtos
    {
        public int ProdutoID { get; set; }
    
    	// Colunas específicas do Produto...
    	// ...
    	// ...
    	
        public virtual ICollection<ProdutosVendas> ProdutosVendas { get; set; }
    }
    
    public class Vendas
    {
        public int VendaID { get; set; }
    
    	// Colunas específicas da Venda...
    	// ...
    	// ...
    
        public virtual ICollection<ProdutosVendas> ProdutosVendas { get; set; }
    }
    
    public class ProdutosVendas
    {
        [Key, Column(Order = 0)]
        public int ProdutoID { get; set; }
        [Key, Column(Order = 1)]
        public int VendaID { get; set; }
    
        public virtual Produtos Produto { get; set; }
        public virtual Vendas Venda { get; set; }
    
    	// Colunas adicionais do relacionamento...
    	// ...
    	// ...
    }


    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    terça-feira, 21 de novembro de 2017 05:24
    Moderador