So aktualisieren Sie vorhandene getrennte Entitäten

entity-framework-core

Frage

Ich habe diesen Code, der in EntityFrameworkCore funktioniert.

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();

    }

Es nimmt eine nicht verbundene Entität, findet sie in der Datenbank und wendet die Änderungen an.

Gibt es einen besseren Weg, dies zu tun?

Ich möchte die Datenbank nicht anrufen. Mit anderen Worten, ich möchte in der Lage sein, die Entität als modifiziert zu markieren und dann SaveChanges () aufzurufen.

Gibt es eine Möglichkeit, das zu tun?

Akzeptierte Antwort

Wenn Sie sicher sind, dass das Element in der Datenbank vorhanden ist, können Sie die Attach-Methode von DbContext wie folgt verwenden

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

Beliebte Antwort

In EntityFramework Core kann jetzt mit der Update-Methode gearbeitet werden:

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

In Version 2.1 kann die Update-Methode jetzt für neue und vorhandene Entitäten verwendet werden, wenn die Id-Eigenschaft automatisch generiert wird.

Die Dokumente

Der Nachteil dabei ist, dass alle Eigenschaften als modifiziert gekennzeichnet sind, auch wenn sie identisch sind. Das Problem dabei ist, dass wenn Sie Änderungen in einem Datenbank-Trigger protokollieren, jede Eigenschaft als geändert markiert wird, auch wenn dies nicht der Fall ist. Wenn nur bestimmte Eigenschaften aktualisiert werden sollen, müssen Sie die Entität aus der Datenbank abrufen, sie nach Bedarf aktualisieren und dann speichern.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum