2016-12-15 1 views
-1

Ich bin derzeit auf der Suche nach Möglichkeiten, ordnungsgemäß zu überprüfen, ob meine Entity Framework entweder hinzugefügt, geändert oder gelöscht wird. Unten ist meine Codierung:Überprüfen Entity Framework hinzugefügt, geändert oder gelöscht

int state = 0; 

    var added = this.ChangeTracker.Entries().Where(e => e.State == EntityState.Added).ToList(); 
    var modified = this.ChangeTracker.Entries().Where(e => e.State == EntityState.Modified).ToList(); 
    var deleted = this.ChangeTracker.Entries().Where(e => e.State == EntityState.Deleted).ToList(); 

     if (added.Count > 0) 
      state = 1; 
     if (modified.Count > 0) 
      state = 2; 
     if (deleted.Count > 0) 
      state = 3; 

Momentan funktioniert es. Ich möchte nur wissen, ob es einen anderen richtigen Weg gibt, es zu tun.

+1

Ganz ehrlich, ich habe noch nie die Notwendigkeit für eine solche Überprüfung gesehen. Wenn ich vermute, dass ich ausstehende Änderungen habe, mache ich eine SaveChanges() und gehe weiter. Ihre Frage macht mich neugierig, was Sie die Notwendigkeit sehen sehen. Können Sie das näher ausführen? Auch ich weiß, dass Ihr Code möglicherweise nicht die tatsächliche, sondern eine vereinfachte Version ist. Was wird jedoch passieren, wenn ein Eintrag geändert und ein anderer gelöscht wird? Der Status scheint in Ihrem Beispiel überschrieben zu sein. Ich nehme an, Sie haben eine ausgefeiltere Zustandsverfolgungsstruktur? –

+0

@ Streamcap Hallo Streamcap. Eigentlich muss ich die Änderungen in meinem EF protokollieren und eine Bemerkung machen. Beispiel, wenn EF hinzugefügt wird, wäre die Bemerkung "Neu (etwas) erstellt", wenn geändert würde es "Aktualisieren (etwas)" sein. Im Moment würde es nur einen Eintrag geben, der sich gleichzeitig ändern kann. Denkst du, dass es richtig ist? Danke – Farid

+0

@Farid Es gibt tatsächlich mehrere Möglichkeiten, dies zu tun. Eine Möglichkeit (obwohl grob) besteht darin, einen Trigger in die Datenbank zu setzen, der eine Protokollzeile beim Einfügen/Aktualisieren/Löschen schreibt. Eine andere Möglichkeit besteht darin, ein Protokollierungs-Framework zu verwenden, falls Sie eine detailliertere Erkennung der Änderungen benötigen. Ich würde Serilog vorschlagen, es ist kostenlos und ziemlich mächtig, ohne eine Tonne zusätzlicher Arbeit zu verlangen. –

Antwort

0

die Leistung verbessern

  • Sie Any statt Erstellen einer Liste mit allen Entitäten nutzen könnten.
  • Sie müssen nicht einer der fullowing state Werte bestimmen, ob eine vorherige

-Code gefunden wird:

Rahmen
int state = 0; 

if (this.ChangeTracker.Entries().Any(e => e.State == EntityState.Deleted)) 
{ 
    state = 3; 
} 
else if (this.ChangeTracker.Entries().Any(e => e.State == EntityState.Modified)) 
{ 
    state = 2; 
} 
else if (this.ChangeTracker.Entries().Any(e => e.State == EntityState.Added)) 
{ 
    state = 1; 
} 
0

Wenn Sie mit Entity 6, können Sie override SaveChanges()

Es wird Auswirkungen auf die Leistung haben, wie von @Matthias Burger vorgeschlagen, auch ich wo Es empfiehlt sich, einen Trigger oder etwas zu verwenden, das auf der Datenbankseite verbleibt.

Verwandte Themen