Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Linked

Como atualizar uma entidade através foreach?

Recommended Posts

Olá Pessoal,

 

Trabalho com ASP.NET MVC 3 e ASP.NET MVC 4 + RAZOR + SQL SERVER.

 

Vou tentar ser o mais objetivo possível para facilitar a interpretação de minha questão.

 

É o seguinte, estou tentando fazer um loop em uma tabela que contém um histórico e assim atualizar algumas de suas propriedades. O problema é que não atualiza. O que eu estaria fazendo de errado? Vejam abaixo o código:

 

  var dtSearch = \\ aqui vai uma data qualquer como parâmetro
  decimal saldoAnt = 100;
  int ccId = 1;
  var lista = _db.Historico.Where(a => a.Cc == ccId
                    && (a.DataMov >=  dtSearch)).OrderBy(b=> b.Cc).ThenBy(b => b.DataMov).ThenBy(b=>b.Id).ToList();

                // Lê e atualiza o movimento
                foreach (var item in lista)
                      
                      item.SaldoAnt  = saldoAnt;
                      item.SaldoAtual = saldoAnt + item.VlrMov;
                      _db.Entry(item).State = EntityState.Modified;

                      saldoAnt = saldoAnt + item.VlrMov;
                {
                _db.SaveChanges();

                // Atualiza a Cc com o último saldo do loop
                var cc = _db.CC.First(j => j.Id == ccId);
                if (cc != null)
                {
                    cc.SaldoAtual = saldoAnt;  // aqui é a variável que deveria estar com o último valor  foreach
                    _db.Entry(cc).State = EntityState.Modified;
                    _db.SaveChanges();
                }

 

Conto com ajuda dos colegas.

 

Forte abraços

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei um pouco estrano o código, a chave depois do foreach esta antes do _db.SaveChanges, esta certo?

 

Abraços...

 

Bom dia tudo na paz?!

 

Engraçado, não sei porque não apareceu a primeira chave do foreach quando eu copiei para postar minha questão aqui no forum. No meu código tá correto, tá assim:

foreach (var item in lista)
{
        ...
}
_db.SaveChanges();

Mesmo assim obrigado pelo alerta.

 

Tenha uma ótima semana.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu trabalho um puco diferente do que esta fazendo e acho que você pode tentar e ver se funciona.
De uma olhada neste artigo: http://www.dotnetcurry.com/ShowArticle.aspx?ID=619 Veja o código da parte Update Objects in Entity Framework 4.0.

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu trabalho um puco diferente do que esta fazendo e acho que você pode tentar e ver se funciona.

De uma olhada neste artigo: http://www.dotnetcurry.com/ShowArticle.aspx?ID=619 Veja o código da parte Update Objects in Entity Framework 4.0.

 

Abraços...

Legal Quintelab, eu não sabia dessa dica, muito obrigado. Mesmo assim se utilizarmos esse método de atualização que você me indicou, no caso de atualização de vários registros, haveria a necessidade do loop para ler esses registros através do foreach.

 

De qualquer forma, com certeza essa maneira que você trabalha, eu também irei utilizar em alguns casos.

 

Fique na paz

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo,

 

Será que o fluxo adequado não seria

 

[inline]

foreach(var item in lista)

{// para cada update

_db.SaveChanges();

}

[/inline]

Olá Fernando, obrigado por participar deste post.

 

Acredito que o _db.SaveChanges() não pode estar dentro de um loop, pelo menos é o que outros colegas que desenvolve com as mesmas ferramentas que trabalho, me orientam a não colocar-lo dentro do loop.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.