Porfavor inclua:
- A definição da entidade
- A classe de mapeamento/configuração do contexto
- A definição da tabela SQL
BackPropagateServerGen
Olhando para o rastreamento de pilha, a principal coisa que vejo é
BackPropagateServerGen
. O Entity Framework está executando sua atualização no banco de dados, mas um de seus valores de chave composta (presumivelmente COPY_ID) está sendo alterado pela chamada UPDATE. Esse valor gerado pelo servidor está voltando da chamada SQL e o Entity Framework está reclamando que o valor da chave está sendo alterado sob ele.
Então, eu acho que seu valor de chave composta COPY_ID é definido como um identificador gerado pelo servidor, mas um ou ambos estão acontecendo:
- Você está mapeando para uma visualização ou procedimento armazenado que está interferindo no que o Entity Framework esperaria de uma atualização vanilla
- Você tem um ou mais gatilhos na tabela, visualização ou procedimento armazenado que está interferindo no resultado.
Se você tiver algum gatilho, desative-o temporariamente para ver se o problema para.
Se você estiver mapeando para uma exibição ou procedimento armazenado, tente mapear diretamente para a tabela, se possível.
Use quaisquer ferramentas de criação de perfil que você tenha para capturar qual SQL está sendo executado pelo código.
Resumo
Acho que a chamada UPDATE está realmente atingindo o banco de dados, mas o resultado do retorno está alterando os valores da chave, causando a falha do Entity Framework e provavelmente revertendo a transação UPDATE (dependendo de qual versão do EF você está usando).