DbContext SaveChanges() - Erkennung von Entitäten aktualisiert
Habe ich überschrieben, der SaveChanges () - Methode in der Entity Framework 4.1 DbContext-Klasse.
Mein override sieht wie folgt aus:
public override int SaveChanges() {
IEnumerable<DbEntityEntry> modifiedEntityEntries = ChangeTracker.Entries().Where( e => e.State == EntityState.Modified );
Debug.Assert( modifiedEntityEntries.Count() == 2 );
int savedChanges = base.SaveChanges();
Debug.Assert( savedChanges == 1 );
//HELP! At this point, how do I tell Which of the two "Modified" entities actually updated a row in the database?
return savedChanges;
}
Davon ausgehen, dass es 2 Personen im Zusammenhang, und beide werden als Geändert markiert (EntityState.Modifiziert). Einer von Ihnen wurde modifiziert und unterscheidet sich von der zugrunde liegenden Datenbank Zeile. Der andere ist nicht wirklich unterschiedlich zu den zugrunde liegenden Datenbank-Zeile, es war nur als solche gekennzeichnet.
Wie sage ich nach Aufruf von SaveChanges (), welche die beiden Entitäten tatsächlich aktualisiert eine Zeile in der Datenbank, und die war auch nicht wirklich geändert, nachdem alle?
InformationsquelleAutor FantasticJamieBurns | 2011-11-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die Art, wie wir unseren code. Lazy loading und proxy-Erstellung aktiviert ist.
Beachten, als wenn die proxy-Erstellung aktiviert ist, EF würde wissen, welche Eigenschaft geändert haben, müssen Sie nicht zu gehen um die Datenbank. Der einzige Ort, an EF möchte nicht wissen, ist, wenn einen etwas anderen Zusammenhang geändert, die Zeile (concurrency-Fehler), um zu vermeiden, dass Sie verwenden würden, RowVersion-Spalte/Eigenschaft
Im Konstruktor:
ich aktualisiert meine Antwort mit einigen code-Beispiel. BusinessBase ist unser baseclass für alle Entitäten.
InformationsquelleAutor np-hard