Usuário com melhor resposta
Erro ao salvar dados em uma tabela com chave FK.

Pergunta
-
Olá a todos,
Estou usando: Entity Framework
No banco de dados:
Tenho um tabela cliente e uma tabela empresa;
Na tabela cliente tenho um compo Empres_Id que é uma FK da tabela empresa;
Fiz uma rotina para cadastro e atualização como mostra o código abaixo:
void Atualizar()
{
try
{
using (var ctx = new sigproEntities())
{
var atualiza = ctx.cliente.FirstOrDefault(c => c.Id == Cliente.Id);
if (rbAtivo.Checked)
{
aux = "A";
}
if (rbInativo.Checked)
{
aux = "I";
}
if (cbTipo.Text == "CPF")
{
atualiza.DTCadastro = Convert.ToDateTime(mtbDtCadastro.Text);
atualiza.Tipo = cbTipo.Text;
atualiza.SituacaoCliente = aux;
atualiza.Nome = txtNome.Text;
atualiza.Endereco = txtEndereco.Text;
atualiza.Complemento = txtComplemento.Text;
atualiza.Bairro = txtBairro.Text;
atualiza.Cep = mtbCep.Text.Replace(".", "").Replace("-", "");
atualiza.Cidade = txtCidade.Text;
atualiza.Estado = txtUf.Text;
atualiza.TelFixo = mtbTelFixo.Text.Replace("(", "").Replace(")", "").Replace("-", "");
atualiza.TelCelular = mtbTelCelular.Text.Replace("(", "").Replace(")", "").Replace("-", "");
atualiza.Email = txtEmail.Text;
atualiza.CpfCnpj = txtCpfCnpj.Text.Replace(".", "").Replace("-", "");
atualiza.RgIe = txtRgIe.Text;
atualiza.DtNacimento = Convert.ToDateTime(mtbDtNacimento.Text);
atualiza.Pai = txtPai.Text;
atualiza.Mae = txtMae.Text;
ctx.SaveChanges();
}
else if (cbTipo.Text == "CNPJ")
{
atualiza.DTCadastro = Convert.ToDateTime(mtbDtCadastro.Text);
atualiza.Tipo = cbTipo.Text;
atualiza.SituacaoCliente = aux;
atualiza.Nome = txtNome.Text;
atualiza.Endereco = txtEndereco.Text;
atualiza.Complemento = txtComplemento.Text;
atualiza.Bairro = txtBairro.Text;
atualiza.Cep = mtbCep.Text.Replace(".", "").Replace("-", "");
atualiza.Cidade = txtCidade.Text;
atualiza.Estado = txtUf.Text;
atualiza.TelFixo = mtbTelFixo.Text.Replace("(", "").Replace(")", "").Replace("-", "");
atualiza.TelCelular = mtbTelCelular.Text.Replace("(", "").Replace(")", "").Replace("-", "");
atualiza.Email = txtEmail.Text;
atualiza.CpfCnpj = txtCpfCnpj.Text.Replace(".", "").Replace("-", "");
atualiza.RgIe = txtRgIe.Text;
atualiza.NomeSocio = txtNomeSocio.Text;
atualiza.CpfSocio = txtCpfSocio.Text.Replace(".", "").Replace("-", "");
atualiza.RgSocio = txtRgSocio.Text;
atualiza.Site = txtSite.Text;
ctx.SaveChanges();
};
}
MessageBox.Show("Dados alterados com sucesso!", "Aviso do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void Gravar()
{
try
{
using (var ctx = new sigproEntities())
{
if (rbAtivo.Checked)
{
aux = "A";
}
if (rbInativo.Checked)
{
aux = "I";
}
if (cbTipo.Text == "CPF")
{
var CL = new cliente
{
Empresa_Id = 1, //(É o código da empresa na tabela empresa)
DTCadastro = Convert.ToDateTime(mtbDtCadastro.Text),
Tipo = cbTipo.Text,
SituacaoCliente = aux,
Nome = txtNome.Text,
Endereco = txtEndereco.Text,
Complemento = txtComplemento.Text,
Bairro = txtBairro.Text,
Cep = mtbCep.Text.Replace(".", "").Replace("-", ""),
Cidade = txtCidade.Text,
Estado = txtUf.Text,
TelFixo = mtbTelFixo.Text.Replace("(", "").Replace(")", "").Replace("-", ""),
TelCelular = mtbTelCelular.Text.Replace("(", "").Replace(")", "").Replace("-", ""),
Email = txtEmail.Text,
CpfCnpj = txtCpfCnpj.Text.Replace(".", "").Replace("-", ""),
RgIe = txtRgIe.Text,
DtNacimento = Convert.ToDateTime(mtbDtNacimento.Text),
Pai = txtPai.Text,
Mae = txtMae.Text,
};
ctx.cliente.Add(CL);
ctx.SaveChanges();
}
else if (cbTipo.Text == "CNPJ")
{
var CL = new cliente
{
Empresa_Id = 1, //(É o código da empresa na tabela empresa)
DTCadastro = Convert.ToDateTime(mtbDtCadastro.Text),
Tipo = cbTipo.Text,
SituacaoCliente = aux,
Nome = txtNome.Text,
Endereco = txtEndereco.Text,
Complemento = txtComplemento.Text,
Bairro = txtBairro.Text,
Cep = mtbCep.Text.Replace(".", "").Replace("-", ""),
Cidade = txtCidade.Text,
Estado = txtUf.Text,
TelFixo = mtbTelFixo.Text.Replace("(", "").Replace(")", "").Replace("-", ""),
TelCelular = mtbTelCelular.Text.Replace("(", "").Replace(")", "").Replace("-", ""),
Email = txtEmail.Text,
CpfCnpj = txtCpfCnpj.Text.Replace(".", "").Replace("-", ""),
RgIe = txtRgIe.Text,
NomeSocio = txtNomeSocio.Text,
CpfSocio = txtCpfSocio.Text.Replace(".", "").Replace("-", ""),
RgSocio = txtRgSocio.Text,
Site = txtSite.Text
};
ctx.cliente.Add(CL);
ctx.SaveChanges();
};
}
MessageBox.Show("Dados salvos com sucesso!", "Aviso do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnGravar_Click(object sender, EventArgs e)
{
try
{
if (txtCodigo.Text == null)
{
Gravar();
btnPesquisar.Enabled = true;
btnNovo.Enabled = true;
btnGravar.Enabled = true;
}
else if (txtCodigo.Text == Cliente.Id.ToString()) // Aqui é onde aponta o erro.
{
Atualizar();
btnPesquisar.Enabled = true;
btnNovo.Enabled = true;
btnGravar.Enabled = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Consulta, busca e atualização funcionam perfeitamente, o problema é quando vou inserir um novo cliente e aponta o seguinte erro "Object reference not set to an instance of an object" e aponta um erro na linha
"else if (txtCodigo.Text == Cliente.Id.ToString()) do metodo btnGravar_click estas linha deste metodo e apenas para chamar os metodos gravar() e atualizar(). Se eu deixar somente a linha onde chamo o metodo Gravar() funciona normal só que fazendo a verificação apresenta este erro. OBS: se eu tirar o relacionamento entre a tabela cliente e empresa e metodo funciona perfeitamente.
Respostas
-
Samuel,
Obrigado pela ajuda, agora deu certo, só que tive que alterar mais um detalhe no método click do botão salvar.
Antes:
if (txtCodigo.Text == null)Depois:
if (txtCodigo.Text == "")
Feito a alteração que vc me passou + a que eu fiz tudo funciona bem.
- Marcado como Resposta Elessandro Poças sexta-feira, 12 de abril de 2013 13:04
Todas as Respostas
-
Cara,
Esse problema de relacionamento não tem nada a ver com o problema do código. Provavelmente o seu Cliente.Id está voltando nulo e quando tenta converter com ToString() apresenta o erro. Para resolver o seu problema de conversão com valores nulos, utilize o Parse ou o Convert:
else if (txtCodigo.Text == Convert.ToString(Cliente.Id)) { Atualizar(); btnPesquisar.Enabled = true; btnNovo.Enabled = true; btnGravar.Enabled = true; }
Dessa forma quando converte para string não da erro se o valor voltar nulo. Porém para ter certeza da minha teoria, veja o valor da sua propriedade debugando o código se está retornando nulo realmente.
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 11 de abril de 2013 23:00
-
-
Vou testar..
- Editado Elessandro Poças sexta-feira, 12 de abril de 2013 13:02
-
Samuel,
Obrigado pela ajuda, agora deu certo, só que tive que alterar mais um detalhe no método click do botão salvar.
Antes:
if (txtCodigo.Text == null)Depois:
if (txtCodigo.Text == "")
Feito a alteração que vc me passou + a que eu fiz tudo funciona bem.
- Marcado como Resposta Elessandro Poças sexta-feira, 12 de abril de 2013 13:04