O modo mais fácil de atualizarmos dados de nosso modelo no banco de dados é através do método Attach. Assim como utilizamos o InsertOnSumit para executarmos inclusões na base de dados, o método Attach pode ser bastante útil para atualizações de nossas entidades em nossas bases de dados.
Vamos supor uma classe chamada Arquivo:
… e vamos utilizar uma data context como o seguinte:
Em seguida, vamos criar um método para submeter nossas atualizações ao banco de dados:
Observe que caso o valor de nossa propriedade Id seja distinto de ZERO, teremos de executar uma consulta na base de dados para retornar a instância que desejamos e assim fazermos o “de/para” dos dados de nossa instância (com valores atualizados) para a instância vinda do banco de dados.
Se utilizássemos o método Attach iríamos reduzir a complexidade deste código e removeríamos uma consulta desnecessária ao banco de dados para buscar a instância que lá existe, desta maneira:
Simples! Veja que a complexidade do código foi reduzida e eliminamos uma consulta extra ao banco de dados, o que acaba gerando uma rotina de atualização mais rápida e performática.
Mas existe uma ressalva sobre este método: o Attach EXIGE que a instância de objeto passada por parâmetro não esteja vinculada a nenhum outro Data Context, isto é, caso a instância de objeto passada por parâmetro para o método Salvar tenha vindo diretamente de um Data Context, o attach não ocorrerá, e receberemos uma mensagem de erro, por isso, neste caso, a classe Arquivo implementa a interface ICloneable, resultando nesta estrutura:
[]s e até a próxima! =]
Por
Fernando Henrique Inocêncio Borba Ferreira.
Olá Fernando,
Você sabe como eu faço para clonar um objeto no EF6 ?
Somente utilizando o ICloneable não funciona, ele retorna um erro ao tentar salvar entidades filhas relacionadas.
Olá Alexandre,
Tudo bem?
Eu costumo fazer de duas formas: settar o status das entidades filhas manualmente ou usar reflection para fazer esse trabalho automaticamente.
Veja nesse post como é possível fazer isso via reflection: https://ferhenriquef.com/2013/03/28/construindo-camadas-de-acesso-a-dados-parte-iii-repositrios-genricos-pantheon/
O EF não clona instâncias de objetos.
[]s!