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 }
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(); }
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(); }
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(); }
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(); }
public void Atualizar(Piloto piloto) { _rallyDbContexto.Attach(piloto); _rallyDbContexto.Entry(piloto).State = Microsoft.EntityFrameworkCore.EntityState.Modified; _rallyDbContexto.SaveChanges(); }