Pergunta

Estou usando DTOs e conversores em um cenário de estrutura de entidade.Quero atualizar uma entidade.Então coloquei esta afirmação:databasecontext.Tablename(s).Attach(entityobj);Sempre que chega aqui o programa termina com este erro:An entity with the same identity already exists in this EntitySet.

Eu senti que poderia contornar isso dizendo databasecontext.Tablename(s).Detach(entityobj);antes de ligar para Attach novamente.Mas o programa ainda falha na instrução Attach.

o que estou perdendo?Qual método no contexto do banco de dados chama Update no serviço de domínio?

Foi útil?

Solução

Parece que você está mantendo o contexto aberto enquanto faz as alterações.

Nesse caso, você não precisa recolocar o objeto para o contexto.

Se você abrir um contexto, obter um objeto de um contexto, feche o contexto, faça algumas alterações no objeto e abra um novo contexto. Nesse caso, você precisa anexar o objeto ao contexto.

Outras dicas

A questão não está clara.Você não mencionou quanto tempo dura o contexto do seu banco de dados e quando você carregou a entidade no contexto.

Mas com base na sua pergunta, acho que você carregou a entidade e a passou em algum lugar como DTO e quando o DTO é retornado você ainda está usando o mesmo contexto.Você converte DTO em entidade e está tentando anexá-lo novamente => exceção BANG.A mesma entidade não pode ser colocada duas vezes no contexto.Tente usar ObjectContext.ApplyCurrentValues ​​(EF 4.0) ou ApplyPropertyChanges (EF 1.0).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top