Error performing Update using EntityFramework Core

0

I have a layered project using DDD and I'm having problems while doing UPDATE from a record of my PersonSituation class with EF Core.

public Task Handle(UpdatePessoaSituacaoCommand message, CancellationToken cancellationToken)
        {
            if (!message.IsValid())
            {
                NotifyValidationErrors(message);
                return Task.CompletedTask;
            }

            var pessoaSituacao = new PessoaSituacao(message.Id, message.Descricao);
            var existingPessoaSituacao = _pessoaSituacaoRepository.GetById(pessoaSituacao.Id);

            if (existingPessoaSituacao != null && existingPessoaSituacao.Id != pessoaSituacao.Id)
            {
                if (!existingPessoaSituacao.Equals(pessoaSituacao))
                {
                    Bus.RaiseEvent(new DomainNotification(message.MessageType, "Já existe uma Situação cadastrada com o ID informado."));
                    return Task.CompletedTask;
                }
            }

            _pessoaSituacaoRepository.Update(pessoaSituacao);

            if (Commit())
            {
                Bus.RaiseEvent(new PessoaSituacaoUpdatedEvent(pessoaSituacao.Id, pessoaSituacao.Descricao));
            }

            return Task.CompletedTask;
        }

If I comment the section below, the problem does not happen, but I can not leave it commented ...

var existingPessoaSituacao = _pessoaSituacaoRepository.GetById(pessoaSituacao.Id);

            if (existingPessoaSituacao != null && existingPessoaSituacao.Id != pessoaSituacao.Id)
            {
                if (!existingPessoaSituacao.Equals(pessoaSituacao))
                {
                    Bus.RaiseEvent(new DomainNotification(message.MessageType, "Já existe uma Situação cadastrada com o ID informado."));
                    return Task.CompletedTask;
                }
            }

But why does this happen and how can I resolve it?

    
asked by anonymous 08.07.2018 / 16:25

1 answer

0

Friend, when you search for a database record with Entity, this is saved in a framework cache, (an object reference is saved), but when we update an object, the ID is right, but in the EF cache the reference is another, and this causes a conflict because it tries to add an object with the same ID in the cache.

In this case, you have two alternatives:

  • First: search by ID for the object you want to change, and on that loaded object you assign the changes, and then send the update.

11.07.2018 / 02:52