Delete/Update-Viele zu Viele Entity Framework. Kann es nicht funktionieren
Ich m mit EF4 und Probleme mit vielen, vielen Updates und löschen des Elements.
Ich bin zufrieden mit dem einfügen, aber aktualisieren und löschen Sie können nicht, es herauszufinden.
Angenommen ich habe 3 Tabellen und 3 dto-Klassen, die Spiele
-
Tisch
ClassID-ClassName
-
Schüler Tabelle
StudentID-StudentName
-
StudentClass Tabelle
StudentID-ClassID ///Happy all works I am using existing students to populate the class. Fine. private void InsertClassRoom(ClassRoomDto classRoomDto) { using (var ctx = new TrainingContext()) { //Convert dto to Entity var classRoomEntity = new ClassRoom { ClassID = classRoomDto.ClassId, ClassName = classRoomDto.ClassName }; foreach (var studentInClass in classRoomDto.Students) { Student student = ctx.Students.Where(x => x.StudentID == studentInClass.StudentId).SingleOrDefault(); classRoomEntity.Students.Add(student); } ctx.AddToClassRooms(classRoomEntity); ctx.SaveChanges(); } }
Aber ich habe 2 Szenarien, die nicht wissen, was zu tun ist.
- Update Klassenzimmer Name
- Hinzufügen 1 student
- Aktualisieren Sie den Namen, der auf 1 Schüler
Löschen eines Schülers aus der Klasse.
Wie mache ich es?
Dies ist mein Versuch, über update:
private void UpdateClassRoom(ClassRoomDto classRoomDto)
{
using (var ctx = new TrainingContext())
{
var classRoomEntity = new ClassRoom { ClassID = classRoomDto.ClassId, ClassName = classRoomDto.ClassName };
foreach (var studentDto in classRoomDto.Students)
{
if (studentDto.StudentId == 0)
{
//it's a new student add it to the classroom
Student student = new Student { StudentID = studentDto.StudentId, StudentName = studentDto.StudentName };
classRoomEntity.Students.Add(student);
}
else
{
//Alter name of the student
Student student = ctx.Students.Where(x => x.StudentID == studentDto.StudentId).SingleOrDefault();
//update name
student.StudentName = studentDto.StudentName;
//? what do I do finish this attach or ???
}
}
ctx.AddToClassRooms(classRoomEntity);
ctx.SaveChanges();
}
}
public void DeleteStudent(ClassRoomDto classRoomDto)
{
using (var ctx = new TrainingContext())
{
//lost on how to delete a student in many to many
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst, ich gehe davon aus, dass Sie wissen, dass die Klassenzimmer bereits in der Datenbank vorhanden. Der einfachste Ansatz ist die Abfrage für Sie zuerst. Der Grund, den Sie tatsächlich bekommen eine neue
ClassRoom
Eintrag eingefügt ist, dass Siectx.AddToClassRooms(classRoomEntry)
. Dies legt die Person, den Kontext und setzt dieEntityState
zuAdded
.Um zu löschen, eine Schülerin aus der Klasse müssen Sie einfach entfernen Sie Sie aus der Sammlung (aber NICHT nennen
ctx.DeleteObject()
, da das entfernen der student von der DB. In Ihrem Fall, der code oben wird nicht darum kümmern, da es fügt nur neue Studenten. Anstelle von matching-alle die Studierenden sind in der Datenbank, aber nicht in der DTO, konnte man einen einfacheren Ansatz. Löschen der Liste zuerst und fügen Sie dann die Studenten:Dies ist wahrscheinlich die Methode, die Sie suchen. Ich habe ausdrücklich geschrieben das erste code-snippet zeigen Ihnen die verschiedenen Fälle im Umgang mit neuen und bestehenden Einrichtungen, aber es ist die zweite (einfachere) Methode, das ist korrekt. Hoffe, das hilft.