none
Nao atualiza tabela com o Entity Framework RRS feed

  • 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

    segunda-feira, 3 de setembro de 2012 19:06

Todas as Respostas

  • Poste seu code?
    segunda-feira, 3 de setembro de 2012 19:39
  • 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?

    terça-feira, 4 de setembro de 2012 01:40
  • 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

    terça-feira, 4 de setembro de 2012 12:01
  • 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

    terça-feira, 4 de setembro de 2012 13:06
  • 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

    terça-feira, 4 de setembro de 2012 13:22
  • 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

    terça-feira, 4 de setembro de 2012 13:26
  • 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

    terça-feira, 4 de setembro de 2012 13:39
    Moderador
  • 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

    terça-feira, 4 de setembro de 2012 13:41
    Moderador
  • 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

    terça-feira, 4 de setembro de 2012 14:07
  • 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

    terça-feira, 4 de setembro de 2012 15:36
  • 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;


    terça-feira, 4 de setembro de 2012 16:01
  • 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

    terça-feira, 4 de setembro de 2012 16:48
    Moderador
  • Como vc viu ai no script SQL eu fiz via relacionamento no MySQL mas ela so vem desta forma para VS. Ja tentei inumeras vezes. Acho q nao esta errado o relacionamento no SQL.

    Tem ideiai do q pode estar acontecendo?

    terça-feira, 4 de setembro de 2012 17:18
  • 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

    quinta-feira, 6 de setembro de 2012 11:33
    Moderador
  • 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

    segunda-feira, 10 de setembro de 2012 19:34
  • 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

    segunda-feira, 10 de setembro de 2012 19:45
    Moderador