Diciamo che ho un'entità Vehicle
che fa riferimento a un'altra entità Type
tramite TypeId
. Voglio aggiornare il Vehicle
usando Entity Framework ma non voglio aggiornare TypeId
(o Type
).
Il problema è che Entity Framework vuole aggiornare l'intero grafico e il risultato è che le proprietà dell'entità Type
vengono sovrascritte con valori vuoti durante l'aggiornamento di Vehicle
.
Immagino di poter recuperare l'entità Type
dall'origine dati prima dell'aggiornamento, ma sembra inutile effettuare due chiamate extra (leggere e salvare) nel database per aggiornare un'entità non necessaria per l'aggiornamento.
Preferirei molto staccare l'entità Vehicle
dal grafico e aggiornare solo questa entità. Come posso fare questo?
Modificare:
Ecco un po 'di codice per rendere più chiara la domanda:
public async Task Update(Vehicle entity)
{
var dataEntity = mapper.Map<VehicleDataEntity>(entity);
await repository.Update(entity.Id, dataEntity);
}
Come puoi vedere, l'entità dati viene istanziata durante la mappatura (usando Automappar).
L'aggiornamento avviene in un semplice repository generico:
public async Task Update(Guid id, TEntity entity)
{
dbContext.Set<TEntity>().Update(entity);
await dbContext.SaveChangesAsync();
}
Ecco il modello di dati:
public class VihecleDataEntity : IEntity
{
[Key]
public Guid Id { get; set; }
public string Description { get; set; }
public VihecleTypeEntity Type { get; set; }
}
public class VihecleTypeEntity: IEntity
{
[Key]
public Guid Id { get; set; }
public string Description { get; set; }
}
Se si desidera aggiornare solo VehicleDataEntity
proprietà VehicleDataEntity
, è possibile impostare la proprietà VehicleDataEntity.Type
su null
. Ciò non eliminerebbe la relazione ma impedirebbe ad EF di aggiornare le proprietà dell'entità correlata.