Estou realmente lutando para fazer isso funcionar quando parece que deveria ser super simples.
Adicionei um cache à minha camada de serviço para dados retornados da EF.
Quando uma entidade é retornada do EF e atualizada, seu estado é EntityState.Modified
.
Quando é retornado do cache, seu estado é EntityState.Detached
, o que faz sentido.
Eu chamo DbContext.Update
se a entidade for Detached
e isso funciona bem para todas as propriedades que não sejam de navegação.
Para uma entidade rastreada, posso atualizar a propriedade FK ID diretamente, mas se ela começou desanexada, deve ser atualizada por meio da propriedade de navegação. O que, por algum motivo, também faz com que uma UPDATE
instrução seja executada para cada entidade relacionada, não apenas para a tabela muitos para muitos que eu esperaria.
Entidade rastreada:
// This will save to the DB
job.PrimaryAccountId = 123;
Entidade inicialmente destacada:
// This will NOT save to the DB
job.PrimaryAccountId = 123;
// This will not save to the DB
job.PrimaryAccount.AccountId = 123;
Atualize e salve após qualquer uma das opções acima:
await _dataAccess.Update(job);
await _dataAccess.SaveChangesAsync();