Usuário com melhor resposta
Como salvar dados em 3 tabelas.

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.
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
-
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
-
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
Todas as Respostas
-
-
-
-
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 !
-
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
-
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.
- Editado MauricioSouza100 terça-feira, 15 de outubro de 2013 02:32
-
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
-
-
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();
-
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
-
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();
Fúlvio Cezar Canducci Dias