Usuário com melhor resposta
Erro na hora de alterar registro

Pergunta
-
Estou usando LINQ num projeto windows form. Tenho uma tabela chamada "entidade". Nessa tabela tem o id da cidade. Cidade é ligada com a tabela Estados. Quando eu salvo uma nova entidade, salva corretamente, porém se eu alterar uma entidade, ele não deixa mudar o id da cidade:Nessa linha eu puxo o registro para altera-lo....
entidade upEntidade = dc.entidades.Single(t => t.identidade == objEntidade.identidade);
o erro dá nessa linha:upEntidade.idcidade = objEntidade.idcidade;
"Operation is not valid due to the current state of the object."
- Movido AndreAlvesLimaModerator quinta-feira, 7 de abril de 2011 16:44 (De:.NET Development - Geral)
Respostas
-
deve ser pq o idcidade eh um relacionamento... o certo eh vc setar a Cidade e nao o codigo em si.... algo como
var idcidade = ((cidade)cboCidade.SelectedItem).idcidade;
objEntidade.Cidade = dc.cidades.SingleOrDefault(c => c.idcidade == idcidade);- Editado Rui SantosModerator sexta-feira, 20 de fevereiro de 2009 23:54 correcao
- Marcado como Resposta JobaDiniz domingo, 22 de fevereiro de 2009 03:14
Todas as Respostas
-
-
Vamos lá então:
Há um DataGridView com os registros. Quando o cara clicar duas vezes em uma linha eu executo o seguinte código:Em que o método "PreencheFormulario()" pega os dados dos objetos (objCredore,objEntidade) e coloca nos devidos campos. Quando o cara clicar em Salvar, eu chamo o método "PreencheObjeto()" que faz o contrário do "PreencheFormulario()":protected override void dgvDados_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { base.dgvDados_CellDoubleClick(sender, e); if (dgvDados.Rows.Count > 0) { objCredore = dc.credores.Single(t => t.idcredor == Convert.ToInt64(dgvDados.CurrentRow.Cells[0].Value)); objEntidade = dc.entidades.Single(t => t.identidade == objCredore.identidade); dgvDados.CurrentRow.Selected = true; PreencheFormulario(); tbcAbas.SelectedTab = tabDetalhes; } } Já nessa linha "objEntidade.idcidade = ..." dá o erro que falei. Esse "objEntidade" é aquele que eu puxo quando o cara dá os 2 cliques na linha do DataGridView. Ele já está preenchido, eu estou preenchendo novamente com as modificações, e ele não deixa "sobreescrever" o idcidade.private void PreencheObjeto() { objEntidade.logradouro = txtLogradouro.Text; objEntidade.bairro = txtBairro.Text; objEntidade.numero = Convert.ToInt32(txtNumero.Text); objEntidade.cep = mtxtCEP.Text; objEntidade.complemento = txtComplemento.Text; objEntidade.idcidade = ((cidade)cboCidade.SelectedItem).idcidade; //...
-
-
-
deve ser pq o idcidade eh um relacionamento... o certo eh vc setar a Cidade e nao o codigo em si.... algo como
var idcidade = ((cidade)cboCidade.SelectedItem).idcidade;
objEntidade.Cidade = dc.cidades.SingleOrDefault(c => c.idcidade == idcidade);- Editado Rui SantosModerator sexta-feira, 20 de fevereiro de 2009 23:54 correcao
- Marcado como Resposta JobaDiniz domingo, 22 de fevereiro de 2009 03:14
-
Mas a tabela Entidades não possui "Cidade", apenas o idcidade que é chave estrangeira.
objEntidade.Cidade não existe.
Tenho Estados que passa chave para Cidades que passa chave para Entidades. E eu nem mudo o estado do cara, só mudo a cidade, ou seja, a cidade pertence ao mesmo estado, e mesmo assim dá erro.
EDIT: Meu erro, existe Cidade sim, e parece que deu certo. Vlw.
-
-
Bom dia!
Estou com o mesmo problema do JOBADINIZ, o que ele fez para solucionar?
sds
obs: ao tentar atribuir o valor ao IDFORNECEDOR ele joga o erro
var dadosAlt = from p in db.VEICULOs
where p.IDVEICULO == Convert.ToInt16(txtIDVeiculo)
select p;VEICULO undid = db.VEICULOs.First(p => p.IDVEICULO == Convert.ToInt16(txtIDVeiculo.Text));
if (undid != null)
{
undid.PLACAVEICULO = txtPlaca.Text;
undid.IDFORNECEDOR = (cboFornecedor.SelectedValue).ToString().Trim();
db.SubmitChanges();
}