Ich habe diesen Artikel gelesen und immer noch wichtige Momente missverstehen. Brauchen wir nicht anrufen
%Vor%in jeder Operation Löschen / Aktualisieren / ...?
Wenn ich die Eigenschaft einer Entität ändere, übergibt SaveChanges()
das Ergebnis an die Datenbank oder muss ich EntityState.Modifyed
? manuell setzen?
Hier ist mein Code:
%Vor%Sie fragen:
Brauchen wir nicht anrufen? _context.SaveChanges () in jeder Operation Löschen / Aktualisieren / ...?
Nein, tun wir nicht. Beim Aufruf von Delete
wird die Entität nicht akkumuliert - wir markieren sie zum Löschen.
Dasselbe gilt für Update
, obwohl Sie nichts anderes tun müssen, um die gewünschten Änderungen an der Entität vorzunehmen. Alle Eigenschaften (die von der Standardvorlage generiert werden) implementieren INotifyPropertyChanged
, sodass sie wissen, wann eine Entität geändert wird.
Alle Entitäten (in der Datenbank zuerst - automatisch generiert durch Vorlage defullt) haben eine Eigenschaft State
. Diese Eigenschaft wird von ObjectContext
beibehalten, solange die Chages im Rahmen der ObjectEntity stattfinden.
z.B.
%Vor% Dann rufen Sie SaveChanges
auf alle Entitäten mit dem Status Added
Deleted
oder Modified
werden ihre Änderungen in der Datenbank in einer lokalen Transaktion
BEARBEITEN
Wenn eine Entität zum Löschen markiert ist und Sie versuchen, sie zu ändern, erhalten Sie InvalidOperationException
Sie können viele Änderungen in Ihrem speicherinternen Kontext durchführen, wie Einfügen, Aktualisieren und Löschen. Sobald Sie SaveChanges () aufrufen, werden alle von Ihnen vorgenommenen Änderungen gespeichert in der DB bei einer einzigen Transaktion. Dies bedeutet, dass sie alle entweder eingereicht werden, oder keiner von ihnen im Falle eines Fehlers.
Tags und Links c# entity-framework savechanges