2017-02-13 6 views
-1

Dies ist eine Update-Methode. Aus einer früheren Ansicht kann der Benutzer Daten für einen vorhandenen Schüler, Lehrer oder Fach ändern.EF6 Überprüfen Sie jede Entität auf Änderungen vor dem Speichern

kehre ich eine Ansicht Modell zu einer Steuerung, die aus diesen 3 verschiedenen Einheiten besteht:

- Ansichtsmodell -

public class StudentTeacherVM 
{ 
    public StudentModel Student { get; set; } 
    public TeacherModel Teacher { get; set; } 
    public SubjectModel Subject { get; set; } 
} 

In der Steuereinheit I die Daten in der VM aufzuschlüsseln in die db Einheiten, so dass sie dann speichern:

 using (var db = new SchoolEntities()) 
     { 
      Student student = new Student() 
      { 
       StudentId = model.StudentId, 
       FirstName = model.FirstName, 
       LastName = model.LastName, 
       EmailAddress = model.StudentEmailAddress, 
       TeacherId = model.TeacherId 
      }; 

      Teacher teacher = new Teacher() 
      { 
       TeacherId = model.TeacherId, 
       FirstName = model.FirstName, 
       LastName = model.LastName, 
       EmailAddress = model.TeacherEmailAddress 
       SubjectId = model.SubjectId 
      }; 

      Subject subject = new Subject() 
      { 
       SubjectId = model.SubjectId, 
       Description = model.SubjectDescription, 
       Level = model.SubjectLevel 
      }; 

      db.Entry(subject).State = EntityState.Modified; 
      db.Entry(teacher).State = EntityState.Modified; 
      db.Entry(student).State = EntityState.Modified; 
      db.SaveChanges(); 
     } 

Manchmal eine oder mehrere der Themen werden nicht geändert, so dass, wenn der Code zu diesem Schritt wird es führt den „Store aktualisieren, einfügen oder löschen s Eine unerwartete Anzahl von Zeilen (0) "Fehler.

Wie überprüfe ich jedes Element vor dem Speichern auf Änderungen, so dass ich ein Element überspringen kann, wenn es keine Änderung gibt?

+0

Die Ausnahme, die Sie erhalten, wird nicht ausgelöst, wenn die Entität nicht geändert wird, aber wenn die Entität neu ist und hinzugefügt werden muss. –

+0

Ich denke, dass Sie sie zu einem DbSet hinzufügen müssen, anstatt mit dem Änderungsstatus manuell zu verwirren, aber ich weiß nicht viel über Ihre Anwendung. – Casey

+0

Casey - Was bedeutet "hinzufügen sie zu einem DbSet"? – BattlFrog

Antwort

1

Wenn Sie die Einheiten auf Änderungen zu überprüfen, müssen Sie diese Abfrage so vielleicht die folgende Lösung für Sie erfüllt:

Wenn Sie die Objekte abfragen und dann ändern Sie dann die Tracker Änderung für diese automatisch tun Sie und Sie müssen nicht Code dafür schreiben. Sie können also den folgenden Code verwenden:

Entitäten werden nur aktualisiert, wenn eine Eigenschaft geändert wurde.

Verwandte Themen