コード例 #1
0
        public void Atualizar(Piloto piloto)
        {
            //O objeto piloto foi recebido pelo cliente pelo PUT, portanto se trata de uma instância não gerenciada...
            //...pelo EntityFrameweork, por ser apenas uma instância que está em memória que veio de fora
            //O Attach faz com que a instância passe a ser gerenciada pelo EntityFramework
            //Sem o Attach o EntityFramework entenderia como um objeto a ser adicionado ao executar o SaveChanges, ao invés de um objeto a ser atualizado
            //Após o Attach, está para alterar o "state", onde o entity framework altera as propriedades da classe para "Modified"

            //Durante o Patch é feita uma busca pelo piloto, portanto não precisa fazer o attach e o entry, pois utilizamos uma...
            //... instância já gerenciada pelo EntityFramework, por isso tem aquele if que verifica se o state é datached

            if (_rallyDbContexto.Entry(piloto).State == Microsoft.EntityFrameworkCore.EntityState.Detached) //QUANDO FOR PUT
            {
                _rallyDbContexto.Attach(piloto);                                                            //Após essa linha, o state é alterado de Dettached para Unchanged
                _rallyDbContexto.Entry(piloto).State = Microsoft.EntityFrameworkCore.EntityState.Modified;  //Após essa linha, o state é alterado para Modified, para que o EntityFramework gere um update ao invés de um insert
            }
            else //QUANDO FOR PATCH
            {
                _rallyDbContexto.Update(piloto);
            }

            _rallyDbContexto.SaveChanges();

            //Detached: Não gerenciado pelo EntityFramework
        }
コード例 #2
0
 public void Atualizar(Telemetria telemetria)
 {
     if (_rallyDbContexto.Entry(telemetria).State == Microsoft.EntityFrameworkCore.EntityState.Detached)
     {
         _rallyDbContexto.Attach(telemetria);
         _rallyDbContexto.Entry(telemetria).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
     }
     else
     {
         _rallyDbContexto.Update(telemetria);
     }
     _rallyDbContexto.SaveChanges();
 }
コード例 #3
0
        public void Atualizar(Piloto piloto)
        {
            /*
             * if (_rallyDbContexto.Pilotos.Contains(piloto))
             * {
             *  _rallyDbContexto.Pilotos.Update(piloto);
             *  _rallyDbContexto.SaveChanges();
             * }*/

            //se for PUT
            if (_rallyDbContexto.Entry(piloto).State == Microsoft.EntityFrameworkCore.EntityState.Detached)
            {
                _rallyDbContexto.Attach(piloto);                                                           // o EF traqueia o piloto na coleção; até então estava 'solta'
                _rallyDbContexto.Entry(piloto).State = Microsoft.EntityFrameworkCore.EntityState.Modified; // considerando todos os campos; dá para fazer por campo individualmente
            }
            else //senão, é PATCH
            {
                _rallyDbContexto.Update(piloto);
            }

            _rallyDbContexto.SaveChanges();
        }
コード例 #4
0
        public void Atualizar(Equipe equipe)
        {
            if (_rallyDbContexto.Entry(equipe).State == Microsoft.EntityFrameworkCore.EntityState.Detached)
            {
                _rallyDbContexto.Attach(equipe);
                _rallyDbContexto.Entry(equipe).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
            }
            else
            {
                _rallyDbContexto.Update(equipe);
            }

            _rallyDbContexto.SaveChanges();
        }
コード例 #5
0
        public void Atualizar(Piloto piloto)
        {
            //PUT e PATCH utilizam método, sendo assim é preciso diferenciar quando o objeto já esta 'tracked'. No caso de 'patch' já estará.
            //No caso de PUT será uma nova instância proveniente de um 'map' do modelo e então 'anexa' ao monitoramento do entity framework.
            //O entity framework não permite que um objeto 'tracked' seja duplicado, por isso da verificação.
            if (_rallyDbContexto.Entry(piloto).State == Microsoft.EntityFrameworkCore.EntityState.Detached)
            {
                //Inclui o objeto no monitoramento do entity framework.
                _rallyDbContexto.Attach(piloto);
                //Deve definir 'forçado' o estado para 'modified' porque se não o entity framework tentará 'inserir' o objeto. Como
                //já sabemos que o método esta em um contexto de 'atualização', esta operação torna-se segura e necessária.
                _rallyDbContexto.Entry(piloto).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
            }
            else
            {
                //Aqui entrará em caso de 'patch' já que o objeto já é um objeto 'tracked' pelo entity framework. Inclusive em caso
                //de efetiva alteração de alguma propriedade, o 'state' estará como 'modified'. Caso contrário estará como
                //'unchanged'.
                _rallyDbContexto.Update(piloto);
            }

            //Efetiva as alterações no banco.
            _rallyDbContexto.SaveChanges();
        }
コード例 #6
0
 public void Atualizar(Piloto piloto)
 {
     _rallyDbContexto.Attach(piloto);
     _rallyDbContexto.Entry(piloto).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
     _rallyDbContexto.SaveChanges();
 }