2017-09-08 1 views
2

Ist es möglich, eine Entität im verbundenen Szenario im Entitätsframework hinzuzufügen. Ich kann Daten aktualisieren, aber zum Hinzufügen und Löschen funktioniert es nicht im verbundenen Modus.Hinzufügen eines neuen Elements im verbundenen Szenario, Entity-Framework

md.Configuration.AutoDetectChangesEnabled = true; 
    var studentList = md.MyStudent.ToList<Student>(); 
    studentList.Add(new Student { Stdname = "nm" }); 
    md.SaveChanges(); 

der neue Artikel ("nm") wird nicht hinzugefügt !!!

EDITED Warum funktionierts, einen Aktualisierungsvorgang und hinzufügen funktioniert nicht, was ist der Unterschied?

wird die Datenbank

Student studentToUpdate = studentList.Where(s => s.Stdname == "stdname1").FirstOrDefault<Student>(); 
    studentToUpdate.Stdname = "Edited stdname3"; 

Antwort

0

Versuchen Sie, die md.MyStudent.Add() Methode zu verwenden, aktualisiert werden.

Ein bisschen Erklärung

EF eine Änderung Tracking-Mechanismus hat, so dass es automatisch die Änderungen bestehen können Sie Ihre Einheiten zu machen. EF muss jedoch über Ihr Objekt/Ihre Entität Bescheid wissen, um die Änderungen erkennen zu können. In Ihrem zweiten Beispiel, das EF von der Studenteneinheit kennt, weil es vom Framework erstellt wurde, haben Sie die Erweiterungsmethode Where() auf eine DbSet Instanz angewendet, die Teil des EF-Kontextes ist.

In Ihrem ersten Beispiel Sie abgerufen auch die Objekte von einem DbSet aber dieses Mal, wenn Sie die ToList() Erweiterungsmethode angewandt, die eine neue List<Student> Instanz enthält alle Schüler in Ihrer Datenbank gespeichert erstellt, aber EF keine Referenz Zu dieser Liste weiß nur die Entitäten in der Liste. Wenn Sie also Elemente aus dieser Liste hinzufügen/entfernen, wird EF nicht über Ihre Änderungen informiert. Sie können weiterhin Änderungen an den Entitäten in der Liste vornehmen und die Änderungen in der Datenbank speichern.

+0

danke, ich kenne diese Methode, aber was ist der Unterschied zwischen dieser Methode und Disconnected Modus, Es scheint Add() ist nicht im Zusammenhang mit verbunden, es funktioniert im getrennten Modus entweder !! Habe ich recht?? –

+0

EF weiß nichts über Ihre Variable 'studentList'. Sie können kein anderes 'Student'-Objekt beibehalten, indem Sie es dieser Liste hinzufügen. –

+0

Also bitte schauen Sie sich meine Edited, danke –

1

Ihr Code funktioniert nicht, weil Ihre ToList<Student>() eine neue Liste zurückgibt, die nicht mit Ihrem Kontext zusammenhängt. Dies ist vergleichbar mit dem folgenden Code:

IList<Student> studentList = new List<Student>(); 
studentList.Add(new Student { Stdname = "nm" }); 

Ihr Kontext aus dem Entity Framework egal, wenn Sie irgendwo in Ihrem Programm eine Liste haben und ein Objekt, um es hinzuzufügen.

Das Bearbeiten vorhandener Objekte in Ihrer Liste funktioniert, weil sie aus dem Kontext geladen wurden und daher im Kontext "registriert" sind.

Wenn Sie ein neues Objekt hinzufügen möchten, müssen Sie es zu md.MyStudent hinzufügen, damit der Kontext sieht, dass ein neues Objekt hinzugefügt werden soll.

Verwandte Themen