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?
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();
}
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.
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.