none
Como salvar dados em 3 tabelas. RRS feed

  • Pergunta

  • Olá pessoal, tenho a seguinte situação. Tenho esse Formulário:

    Primeiro eu fiz um script pra salvar somente o primeiro formulario, sem salvar contatos, ficou assim:

    tb_clientes tb = new tb_clientes();
    tb.clienteNOME = Cliente.clienteNOME;
    tb.clienteCNPJ = Cliente.clienteCNPJ;
    tb.clienteIE = Cliente.clienteIE;
    tb.clienteENDERECO = Cliente.clienteENDERECO;
    tb.clienteNUMERO = Cliente.clienteNUMERO;
    tb.clienteCOMPLEMENTO = Cliente.clienteCOMPLEMENTO;
    tb.clienteBAIRRO = Cliente.clienteBAIRRO;
    tb.clienteCIDADE = Cliente.clienteCIDADE;
    tb.clienteUF = Cliente.clienteUF;
    tb.clienteOBS = Cliente.clienteOBS;
    
    DB DB = new DB();
    mydbEntities1 entidade = DB.contexto;
    entidade.tb_clientes.Add(tb);
    entidade.SaveChanges();

    O script acima funciona perfeitamente para salvar o formulario de clientes, porém gostaria de salvar os contatos também. Fiz o formulário de contato em outra aba. Quando preencho os campos do contato e clico no botão "+", ele adiciona os dados na grid, portanto posso adicionar varios contatos para o mesmo cliente. As tabelas no Banco de dados fiz da seguinte maneira:

    Como posso fazer a sequencia de salvamento:

    Salvar Cliente;

    Pegar Id do Cliente salvo;

    Fazer um foreach da tabela de contatos da Aba Contatos;

    Salvar os contatos e relacionar com a tabela tb_clientes_contatos;

    Como podem ver estou usando EF.

    segunda-feira, 14 de outubro de 2013 04:27

Respostas

  • Se você ta usando EF e ta tudo normalizado é só passar os dados nos relacionamentos comendo pela tb_clientes que vai gravar numa boa!!!!

    Olha o meu blog: http://fulviocanducci.wordpress.com/2013/08/13/operaes-crud-no-entity-framework/ tem muitos para muitos


    Fúlvio Cezar Canducci Dias

    • Marcado como Resposta MauricioSouza100 terça-feira, 15 de outubro de 2013 04:57
    terça-feira, 15 de outubro de 2013 02:14
  • Primeiro retire o SaveChanges do laco foreach correto se os tipo estiver correto ja vai salvar.

    Depois voce tem o id da outra tabela correto e os resto dos dado esta na sua grid tbm ?

    • Marcado como Resposta MauricioSouza100 terça-feira, 15 de outubro de 2013 04:57
    terça-feira, 15 de outubro de 2013 02:44
  • Consegui fazer o que eu queria, não consegui fazer conforme o blog do  Flúvio a parte dos relacionamentos, tentei dessa maneira e funcionou certinho. Mas se tiverem alguma dica fiquem a vontade. Agradeço a ajuda de vocês. Depois tenho que fazer a parte de alterar e deletar, mas tomara que eu consiga fazer sozinho. Abraço galera. Flúvio, parabéns pelo blog.

    DB DB = new DB();
    mydbEntities1 contexto = DB.contexto;
    
    tb_clientes tb = new tb_clientes();
    tb.clienteNOME = Cliente.clienteNOME;
    tb.clienteCNPJ = Cliente.clienteCNPJ;
    tb.clienteIE = Cliente.clienteIE;
    tb.clienteENDERECO = Cliente.clienteENDERECO;
    tb.clienteNUMERO = Cliente.clienteNUMERO;
    tb.clienteCOMPLEMENTO = Cliente.clienteCOMPLEMENTO;
    tb.clienteBAIRRO = Cliente.clienteBAIRRO;
    tb.clienteCIDADE = Cliente.clienteCIDADE;
    tb.clienteUF = Cliente.clienteUF;
    tb.clienteOBS = Cliente.clienteOBS;
    
    contexto.tb_clientes.Add(tb);
    contexto.SaveChanges();
    int clienteId = tb.clienteID;
    
    
    tb_contatos tb2 = new tb_contatos();
    List<tb_contatos> ls = new List<tb_contatos>();
    
    foreach (DataGridViewRow dr in dataGridView1.Rows) {
    	tb2 = new tb_contatos();
    	tb2.contatoNOME = dr.Cells["colNome"].Value.ToString();
    	tb2.contatoEMAIL = dr.Cells["colEmail"].Value.ToString();
    	tb2.contatoTELEFONE = dr.Cells["colFixo"].Value.ToString();
    	tb2.contatoCELULAR = dr.Cells["colCelular"].Value.ToString();
    	tb2.contatoRAMAL = dr.Cells["colRamal"].Value.ToString();
    	contexto.tb_contatos.Add(tb2);
    	ls.Add(tb2);             
    }
    contexto.SaveChanges();
    
    tb_clientes_contatos tb3 = new tb_clientes_contatos();
    
    foreach (tb_contatos ListaContatos in ls) {
    	tb3 = new tb_clientes_contatos();
    	tb3.contato_clienteCLIENTEID = clienteId;
    	tb3.contato_clienteCONTATOID = ListaContatos.contatoID;
    	contexto.tb_clientes_contatos.Add(tb3);
    }
    contexto.SaveChanges();

    • Marcado como Resposta MauricioSouza100 terça-feira, 15 de outubro de 2013 04:57
    terça-feira, 15 de outubro de 2013 04:56

Todas as Respostas

  • Bom dia Mauricio,

    Se te ajudar, após o SaveChanges(), o tb.clienteID recebe o Codigo que acabou de ser inserido no banco.

    Você pode pegar ele, atribuir em alguma variável, para usar no foreach quando for salvar os Contatos.

    []s

    segunda-feira, 14 de outubro de 2013 11:11
  • Olá, para pegar o id do primeiro até eu sei, mas não sei como fazer a sequencia de salvamento nas outras tabelas. Vlw a dica.
    segunda-feira, 14 de outubro de 2013 15:12
  • Se alguém pudesse pelo menos me ajudar a fazer um foreach para salvamento de dados já era grande ajuda.
    segunda-feira, 14 de outubro de 2013 20:45
  • Entao vamos la vc tem o codigo que salva os clientes correto perfeitamente e desse cliente voce pega o id e relaciona com o outro e vai montar seu save ok. Entao vamos la a nao ser que voce faca uma classe generica um foreach nao vai dar pq as propriedades sao diferentes pra fazer o De Para correto.

    Ou voce cria um metodo generico pra salvar com uma lista de entidades que ai sim usaria seu foreach tipo assim :

    public List<T> Salvar(List<T> item)
    {
       using(meucontexto teste = .......)
        {
            foreach(var entidades in item)
            {
            teste.InsertOrSubmit(entidades);
            teste.SubmitChanges();
            //ou no entity
            teste.SaveChanges();
            }
         }
      return item;
    }
    Mas o De Para tera que acontecer tipo apos seu salvar voce pega o id cliente e envia pra outra tabela depois apos a outra pega o id e envia pra outra p salvar e assim vai. Se ajudou contribua !

    terça-feira, 15 de outubro de 2013 01:44
  • Se você ta usando EF e ta tudo normalizado é só passar os dados nos relacionamentos comendo pela tb_clientes que vai gravar numa boa!!!!

    Olha o meu blog: http://fulviocanducci.wordpress.com/2013/08/13/operaes-crud-no-entity-framework/ tem muitos para muitos


    Fúlvio Cezar Canducci Dias

    • Marcado como Resposta MauricioSouza100 terça-feira, 15 de outubro de 2013 04:57
    terça-feira, 15 de outubro de 2013 02:14
  • O exemplo do Daniel não entendi muito bem, o do Fulvio, talvez ele entenda o que quero fazer. Preciso fazer isso aqui primeiro, é mais ou menos isso que quero fazer, e ver se depois consigo salvar na tabela clientescontatos.

    tb_contatos tb2 = new tb_contatos();
    foreach (DataGridViewRow dr in dataGridView1.Rows) {
    tb2 = new tb_contatos();
    tb2.contatoNOME = dr.Cells["colNome"].Value.ToString();
    tb2.contatoEMAIL = dr.Cells["colEmail"].Value.ToString();
    tb2.contatoTELEFONE = dr.Cells["colFixo"].Value.ToString();
    tb2.contatoCELULAR = dr.Cells["colCelular"].Value.ToString();
    tb2.contatoRAMAL = dr.Cells["colRamal"].Value.ToString();
    contexto.tb_contatos.Add(tb2);
    contexto.SaveChanges();
    }
    Porém o código acima não funciona.


    terça-feira, 15 de outubro de 2013 02:31
  • Primeiro retire o SaveChanges do laco foreach correto se os tipo estiver correto ja vai salvar.

    Depois voce tem o id da outra tabela correto e os resto dos dado esta na sua grid tbm ?

    • Marcado como Resposta MauricioSouza100 terça-feira, 15 de outubro de 2013 04:57
    terça-feira, 15 de outubro de 2013 02:44
  • Realmente funcionou essa parte daniel, agora vou tentar relacionar com a tb_clientes_contatos.
    terça-feira, 15 de outubro de 2013 03:18
  • O código está assim por enquanto:

    DB DB = new DB();
    mydbEntities1 contexto = DB.contexto;
    
    tb_clientes tb = new tb_clientes();
    tb.clienteNOME = Cliente.clienteNOME;
    tb.clienteCNPJ = Cliente.clienteCNPJ;
    tb.clienteIE = Cliente.clienteIE;
    tb.clienteENDERECO = Cliente.clienteENDERECO;
    tb.clienteNUMERO = Cliente.clienteNUMERO;
    tb.clienteCOMPLEMENTO = Cliente.clienteCOMPLEMENTO;
    tb.clienteBAIRRO = Cliente.clienteBAIRRO;
    tb.clienteCIDADE = Cliente.clienteCIDADE;
    tb.clienteUF = Cliente.clienteUF;
    tb.clienteOBS = Cliente.clienteOBS;
    
    contexto.tb_clientes.Add(tb);
    contexto.SaveChanges();
    
    
    tb_contatos tb2 = new tb_contatos();
    foreach (DataGridViewRow dr in dataGridView1.Rows) {
    tb2 = new tb_contatos();
    tb2.contatoNOME = dr.Cells["colNome"].Value.ToString();
    tb2.contatoEMAIL = dr.Cells["colEmail"].Value.ToString();
    tb2.contatoTELEFONE = dr.Cells["colFixo"].Value.ToString();
    tb2.contatoCELULAR = dr.Cells["colCelular"].Value.ToString();
    tb2.contatoRAMAL = dr.Cells["colRamal"].Value.ToString();
    contexto.tb_contatos.Add(tb2);
    }
    
    contexto.SaveChanges();

    terça-feira, 15 de outubro de 2013 03:20
  • Consegui fazer o que eu queria, não consegui fazer conforme o blog do  Flúvio a parte dos relacionamentos, tentei dessa maneira e funcionou certinho. Mas se tiverem alguma dica fiquem a vontade. Agradeço a ajuda de vocês. Depois tenho que fazer a parte de alterar e deletar, mas tomara que eu consiga fazer sozinho. Abraço galera. Flúvio, parabéns pelo blog.

    DB DB = new DB();
    mydbEntities1 contexto = DB.contexto;
    
    tb_clientes tb = new tb_clientes();
    tb.clienteNOME = Cliente.clienteNOME;
    tb.clienteCNPJ = Cliente.clienteCNPJ;
    tb.clienteIE = Cliente.clienteIE;
    tb.clienteENDERECO = Cliente.clienteENDERECO;
    tb.clienteNUMERO = Cliente.clienteNUMERO;
    tb.clienteCOMPLEMENTO = Cliente.clienteCOMPLEMENTO;
    tb.clienteBAIRRO = Cliente.clienteBAIRRO;
    tb.clienteCIDADE = Cliente.clienteCIDADE;
    tb.clienteUF = Cliente.clienteUF;
    tb.clienteOBS = Cliente.clienteOBS;
    
    contexto.tb_clientes.Add(tb);
    contexto.SaveChanges();
    int clienteId = tb.clienteID;
    
    
    tb_contatos tb2 = new tb_contatos();
    List<tb_contatos> ls = new List<tb_contatos>();
    
    foreach (DataGridViewRow dr in dataGridView1.Rows) {
    	tb2 = new tb_contatos();
    	tb2.contatoNOME = dr.Cells["colNome"].Value.ToString();
    	tb2.contatoEMAIL = dr.Cells["colEmail"].Value.ToString();
    	tb2.contatoTELEFONE = dr.Cells["colFixo"].Value.ToString();
    	tb2.contatoCELULAR = dr.Cells["colCelular"].Value.ToString();
    	tb2.contatoRAMAL = dr.Cells["colRamal"].Value.ToString();
    	contexto.tb_contatos.Add(tb2);
    	ls.Add(tb2);             
    }
    contexto.SaveChanges();
    
    tb_clientes_contatos tb3 = new tb_clientes_contatos();
    
    foreach (tb_contatos ListaContatos in ls) {
    	tb3 = new tb_clientes_contatos();
    	tb3.contato_clienteCLIENTEID = clienteId;
    	tb3.contato_clienteCONTATOID = ListaContatos.contatoID;
    	contexto.tb_clientes_contatos.Add(tb3);
    }
    contexto.SaveChanges();

    • Marcado como Resposta MauricioSouza100 terça-feira, 15 de outubro de 2013 04:57
    terça-feira, 15 de outubro de 2013 04:56
  • Consegui fazer o que eu queria, não consegui fazer conforme o blog do  Flúvio a parte dos relacionamentos, tentei dessa maneira e funcionou certinho. Mas se tiverem alguma dica fiquem a vontade. Agradeço a ajuda de vocês. Depois tenho que fazer a parte de alterar e deletar, mas tomara que eu consiga fazer sozinho. Abraço galera. Flúvio, parabéns pelo blog.

    DB DB = new DB();
    mydbEntities1 contexto = DB.contexto;
    
    tb_clientes tb = new tb_clientes();
    tb.clienteNOME = Cliente.clienteNOME;
    tb.clienteCNPJ = Cliente.clienteCNPJ;
    tb.clienteIE = Cliente.clienteIE;
    tb.clienteENDERECO = Cliente.clienteENDERECO;
    tb.clienteNUMERO = Cliente.clienteNUMERO;
    tb.clienteCOMPLEMENTO = Cliente.clienteCOMPLEMENTO;
    tb.clienteBAIRRO = Cliente.clienteBAIRRO;
    tb.clienteCIDADE = Cliente.clienteCIDADE;
    tb.clienteUF = Cliente.clienteUF;
    tb.clienteOBS = Cliente.clienteOBS;
    
    contexto.tb_clientes.Add(tb);
    contexto.SaveChanges();
    int clienteId = tb.clienteID;
    
    
    tb_contatos tb2 = new tb_contatos();
    List<tb_contatos> ls = new List<tb_contatos>();
    
    foreach (DataGridViewRow dr in dataGridView1.Rows) {
    	tb2 = new tb_contatos();
    	tb2.contatoNOME = dr.Cells["colNome"].Value.ToString();
    	tb2.contatoEMAIL = dr.Cells["colEmail"].Value.ToString();
    	tb2.contatoTELEFONE = dr.Cells["colFixo"].Value.ToString();
    	tb2.contatoCELULAR = dr.Cells["colCelular"].Value.ToString();
    	tb2.contatoRAMAL = dr.Cells["colRamal"].Value.ToString();
    	contexto.tb_contatos.Add(tb2);
    	ls.Add(tb2);             
    }
    contexto.SaveChanges();
    
    tb_clientes_contatos tb3 = new tb_clientes_contatos();
    
    foreach (tb_contatos ListaContatos in ls) {
    	tb3 = new tb_clientes_contatos();
    	tb3.contato_clienteCLIENTEID = clienteId;
    	tb3.contato_clienteCONTATOID = ListaContatos.contatoID;
    	contexto.tb_clientes_contatos.Add(tb3);
    }
    contexto.SaveChanges();

    Obrigado a você .... e parabéns em encontrar sua solução!

    Fúlvio Cezar Canducci Dias

    terça-feira, 15 de outubro de 2013 16:16