Inquiridor
Nao atualiza tabela com o Entity Framework

Pergunta
-
Opa a todos,
Pessoal tenho uma tabela e quando eu crio um novo registro com o addToTabela funciona legal mas quando eu vou altualizar algum registro com o ApplyCurrentValues("tabela", valores) o savechanges volta com 0 de resposta o que pode estar acontecendo?
Obrigdo
- Movido Seilor Bonancio Junior terça-feira, 4 de setembro de 2012 13:16 (De:ASP.NET)
Todas as Respostas
-
-
Marcelo e como eu disse o codigo é simples...
dim valores as new clientes
valores.nome = "Joana"
valores.cep = "11233110
Se eu dou :
dados.addToTabela(valores)
if dados.savechanges()>0 then
response.write("Tudo certo")
else
response.write("Deu errado")
end if
O dado e incluido certinho e aparece Tudo certo
mas se eu tento atualizar assim:
dim valores as new clientes
valores.nome = "Joana1"
valores.cep = "11233111"
dados.ApplyCurrenctValues("tabela",valores)
if dados.savechanges()>0 then
response.write("Tudo certo")
else
response.write("Deu errado")
end if
E não da certo aparece Deu errado.
O q sera q esta errado?
-
Veja o exemplo que eu fiz, ele funcionou perfeitamente:
'Criado objeto entities. Dim w As New WLMCPRD1Entities() 'Busca o item para o update. Dim item As Item = (From i In w.Item Where i.IDItem = 1i).First() 'Mudei apenas um campo. item.dsItem = "PAO DI BATATA" 'Aplicado. w.ApplyCurrentValues("Item", item) If w.SaveChanges() = 1 Then 'Funfou! 'Salvo! 'Não funfou. Else End If
-
Marcelo bom dia.
Eu tenho outras 30 tabelas que funcionam perfeitamente, somente esta infeliz que resolver dar isto. Tem algum jeito de ver qual o erro q esta dando nela pois não consegui achar nada de errado nela. Gostaria de ver o erro q esta dando quando eu faco o update mas o savechange nao volta erro.
Obrigado
-
João, desculpa, mas pelo que eu entendi do seu código você está criando um objeto novo e quer atualiza-lo. Mas para vc atualizar algo você precisa já ter ele em memória, não um novo. Precisa busca-lo no banco, com o MarceloSchneider fez.
Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)
Se precisar: @MayogaX -
Priscila bom dia.
O meu codigo esta semelhante ao do Marcelo acima eu so não coloquei a linha que ele busca o registro e depois altera e depois grava. O q esta acontecendo é que se eu peço para ele incluir um novo registro da tudo certo, mas se depois eu tento editar qualquer registro ele da erro. Como eu disse acima tenho outras 30 tabelas e todas com o mesmo tipo de codigo para inclusão e alteração so esta esta dando o erro.
Gostaria de descobrir como eu vejo que erro esta sendo gerado para eu tentar resolve-lo
Obrigado
-
Olá João,
Bom dia.
Ja tentou mudar o status interno do objeto para Modified?
Veja o código abaixo:
dim valores as new clientes valores.nome = "Joana1" valores.cep = "11233111" 'Neste ponto vc deve atribuir o ID do registro que deseja atualizar na base de dados 'Senão o EF não sabe em qual linha executar o UPDATE valores.Id = 1 dados.Clientes.Attach(stud) dados.ObjectStateManager.ChangeObjectState(valores, System.Data.EntityState.Modified) if dados.savechanges()>0 then response.write("Tudo certo") else response.write("Deu errado") end if
[]s!Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Veja este link: http://entityframeworktutorial.net/update-entity-in-entity-framework.aspx
Ele fala sobre o processo de atualização de instâncias desconectadas do seu contexto original.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Como sempre úteis as respostas do Fernando Henrique.
Mas veja, vc, João, disse que em outras 30 tabelas dá certo, menos nessa. Será que o código está realmente parecido?
Já procurou ver se a estrutura dessa tabela não é diferente das outras? Vai que você pôs alguma restrição com ela.
Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)
Se precisar: @MayogaX -
Priscila e Fernando boa tarde
Olha realmente eu fui verificar a tabela e acho q tem algo de errado com elas. Vou postar abaixo a tela das tabelas no VS.
Isto é para vocês verem como estam os relacionamentos. Acho que deve ter algo de errado pois quando eu faço uma referencia a tabela de referencia do relacionamento o Intelisense não esta voltando com os campos da tabela. Esta voltando assim:
O que sera q aconteceu? Uso o MySQL com servidor de dados.
Obrigado
-
E estes são os scripts de criação das tabelas no MySql:
CREATE TABLE `lancamentos` (
`codigo` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`imobiliarias` varchar(200) COLLATE latin1_general_ci DEFAULT NULL,
`detalhes` longtext COLLATE latin1_general_ci,
`foto1` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto2` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto3` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto4` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto5` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto6` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto7` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto8` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto9` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto10` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`foto11` varchar(250) COLLATE latin1_general_ci DEFAULT NULL,
`Endereco` varchar(200) COLLATE latin1_general_ci DEFAULT NULL,
`cod_bairro` int(11) DEFAULT NULL,
`cod_cidade` int(11) DEFAULT NULL,
`cod_estado` int(11) DEFAULT NULL,
`Mapa` int(11) DEFAULT NULL COMMENT '0=Sim 1=Não',
`suspenso` smallint(6) DEFAULT NULL COMMENT '0=Sim 1=Nao',
PRIMARY KEY (`codigo`),
KEY `ixBairro` (`cod_bairro`) USING BTREE,
CONSTRAINT `fkBairro1` FOREIGN KEY (`cod_bairro`) REFERENCES `bairros` (`codigo`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;CREATE TABLE `lancamentoImobiliarias` (
`codigo` int(11) NOT NULL AUTO_INCREMENT,
`codLancamento` int(11) DEFAULT NULL,
`codImobiliaria` int(11) DEFAULT NULL,
PRIMARY KEY (`codigo`),
KEY `ixImobiliaria` (`codImobiliaria`) USING BTREE,
KEY `ixlancamento` (`codLancamento`) USING BTREE,
CONSTRAINT `fkImobiliarias` FOREIGN KEY (`codImobiliaria`) REFERENCES `imobiliarias` (`codigo`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_Lancamento` FOREIGN KEY (`codLancamento`) REFERENCES `lancamentos` (`codigo`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-
Olá João,
Nesse caso acredito que seja necessário refazer o mapeamento dessa tabela. Vc chegou a fazer isso?
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Olá João,
Alguma evolução?Se possível publiquei o script necessário para criar essas tabelas, vou tentar simular esse cenário em casa neste fim de semana.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Fernando boa tarde
Olha o script da criacao das tabelas esta acima, quanto a evolucao eu tive que tirar o relacionamento das tabelas e trabalhar somente com uma. Ficou pessimo mas ta funcionando.
Pelo que me parece o relacionamento que deveria ser de 1 para muito esta invertido quando chega no VS. Tipo assim: a tabela Lancamento deveria ser unico enquanto os lancamentosImobiliarias deveria ser muito mas esta ficando ao contrario.
Se vc tiver alguma ideia agradeco.
Obrigado
-
Olá João,
Tudo beleza?
Consegue me falar qual a versão do provider do MySQL, do MySQL, do Visual Studio (com ou sem Service Pack) e qualquer outra ferramenta do MySQL que vc esta utilizando integrada ao Visual Studio?
Isso é importante para eu conseguir reproduzir o problema.
Este provider não é feito pela MS, ela é feito pela comunidade do MySql.
Vamos ver como conseguimos resolver ;)
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil