Disons que j'ai une entité Vehicle
qui fait référence à une autre entité Type
via TypeId
. Je veux mettre à jour Vehicle
utilisant Entity Framework mais je ne veux pas mettre à jour TypeId
(ou Type
).
Le problème est qu'Entity Framework veut mettre à jour le graphique entier et le résultat est que les propriétés de l'entité Type
sont remplacées par des valeurs vides lors de la mise à jour de Vehicle
.
Je suppose que je pourrais récupérer l'entité Type
de la source de données avant la mise à jour, mais il ne semble pas nécessaire de faire deux appels supplémentaires (lire et enregistrer) à la base de données pour mettre à jour une entité qui n'avait pas besoin d'être mise à jour.
Je préfère de loin détacher l'entité Vehicle
du graphique et ne mettre à jour que cette entité. Comment puis-je faire ceci?
Éditer:
Voici un code pour rendre la question plus claire:
public async Task Update(Vehicle entity)
{
var dataEntity = mapper.Map<VehicleDataEntity>(entity);
await repository.Update(entity.Id, dataEntity);
}
Comme vous pouvez le voir, l'entité de données est instanciée pendant le mappage (à l'aide d'Automappar).
La mise à jour se fait dans un référentiel générique simple:
public async Task Update(Guid id, TEntity entity)
{
dbContext.Set<TEntity>().Update(entity);
await dbContext.SaveChangesAsync();
}
Voici le modèle de données:
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; }
}
Si vous souhaitez mettre à jour uniquement les propriétés VehicleDataEntity
, vous pouvez définir la propriété VehicleDataEntity.Type
sur null
. Cela ne supprimerait pas la relation mais empêcherait EF de mettre à jour les propriétés de l'entité associée.