Ich habe eine SQL Server-Datenbank wie diese: Master-Tabelle, Detail-Tabelle, Subdetails-Tabelle. Und ich benutze Linq und EF 4.0.
Master kann also mehr Details haben und jedes Detail kann weitere Unterdetails haben.
Ich habe eine MASTER-ID und möchte diesen Datensatz löschen.
Wie kann ich in un colpo solo (EF4.0) einen Stammsatz mit Details und Unterdetails löschen?
Antworten:
1 für die Antwort № 1EF aktiviert standardmäßig den kaskadierenden Löscheffekt für alle Entitäten.
Folgendes wird aus kopiert Hier.
Betrachten Sie die folgenden Schüler- und Standardeinheiten, die eine Eins-zu-Viele-Beziehung haben.
public class Student
{
public Student() { }
public int StudentId { get; set; }
public string StudentName { get; set; }
public virtual Standard Standard { get; set; }
}
public class Standard
{
public Standard()
{
Students = new List<Student>();
}
public int StandardId { get; set; }
public string Description { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
Das folgende Beispiel zeigt den Kaskadenlöscheffekt zwischen Entitäten mit einer Eins-zu-Viele-Beziehung.
using( var ctx = new SchoolContext() ) {
var student1 = new Student() { StudentName = "James" };
var student2 = new Student() { StudentName = "Gandhi" };
var standard1 = new Standard() { StandardName = "Standard 1" };
student1.Standard = standard1;
student2.Standard = standard1;
ctx.Students.Add( student1 );
ctx.Students.Add( student2 );
//inserts students and standard1 into db
ctx.SaveChanges();
//deletes standard1 from db and also set standard_StandardId FK column in Students table to null for
// all the students that reference standard1.
ctx.Standards.Remove( standard1 );
ctx.SaveChanges();
}
Im obigen Beispiel löscht es standard1 aus db und setzt außerdem die Spalte standard_StandardId FK in der Tabelle Students für alle Datensätze, die auf standard1 verweisen, auf null.
EF löscht automatisch verwandte Datensätze in der mittleren Tabelle für viele-zu-viele-Beziehungseinheiten, wenn die eine oder andere Einheit gelöscht wird.
EF ermöglicht somit standardmäßig den kaskadierenden Löscheffekt für alle Entitäten.