Comment mettre à jour une entité déconnectée existante

entity-framework-core

Question

J'ai ce code qui fonctionne dans EntityFrameworkCore.

public void SaveProject(Project item)
    {
        var existing = _context.Projects.FirstOrDefault(a => a.Id == item.Id);
        existing.Description = item.Description;
        existing.IsArchived = item.IsArchived;
        existing.IsDeleted = item.IsDeleted;
        existing.Name = item.Name;
        _context.SaveChanges();

    }

Il prend une entité déconnectée, la trouve dans la base de données et applique les modifications.

Y a-t-il une meilleure manière de faire cela?

J'aimerais ne pas appeler la base de données. En d'autres termes, j'aimerais pouvoir marquer l'entité comme modifiée, puis appeler SaveChanges ().

Y-a-t-il un moyen de faire ça?

Réponse acceptée

Si vous êtes certain que cet élément existe dans la base de données, vous pouvez utiliser la méthode Attach de DbContext As suivante

public void SaveProject(Project item)
{
    _context.Projects.Attach(item);
    _context.Entity(item).State=EntityState.Modified;
    _context.SaveChanges();
}

Réponse populaire

Dans EntityFramework Core, vous pouvez désormais utiliser la méthode Update:

 DbContext.Update<Item>(item);
 this.SaveChanges();

Dans la version 2.1, la méthode Update peut désormais être utilisée pour les entités nouvelles et existantes si la propriété Id est générée automatiquement.

Les docs

L'inconvénient est que toutes les propriétés sont marquées comme modifiées, même si elles sont identiques. Le problème, c'est que si vous enregistrez des modifications dans un déclencheur de base de données, chaque propriété est alors marquée comme modifiée, même si ce n'est pas le cas. Si vous souhaitez uniquement mettre à jour des propriétés spécifiques, vous devez extraire l'entité de la base de données, la mettre à jour comme vous le souhaitez, puis enregistrez.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi