Ich verwende das Ado.Net Entity Framework mit ASP.NET MVC.ADO.NET Entity Framework: Wie erhalten Sie automatische kaskadierende Löschungen?
In meiner MSSQL 2008-Datenbank Ich habe zum Beispiel der folgenden vereinfachten Tabellen und Beziehungen:
(Song) 1--* (Version) 1 -- 1 (VersionInfo)
Ist es möglich, die verknüpften Versionen und ihre Version gelöschten automatisch, wenn ich einen Song löschen?
Derzeit bin ich so etwas wie den folgenden Code, der eine viel Handarbeit ist, da einige Tabellen bis zu 8 Beziehungen haben und diese Beziehungen haben subrelations auch manchmal:
db = new Database() //Entities
Song song = db.Song.First();
Song.Version.Load();
foreach(Version version in Song.Version.ToList())
{
//Remove Song-Version Reference.
song.Version.Remove(version);
//Get The VersionInfo so we can delete it after we deleted the Version object.
version.VersionInfoReference.Load();
VersionInfo versionInfo = version.VersionInfo;
//Now we can delete the Version Object.
db.DeleteObject(version);
//Now we can also delete the versionInfo, since the reference is gone.
db.DeleteObject(versionInfo);
}
db.DeleteObject(song);
Es muss ein einfacher Möglichkeit, kaskadierende Löschungen zu erhalten. Ich habe bereits versucht, die Beziehung Einstellung in MSSQL auf Cascade beim Löschen zu setzen, aber es hat nichts gemacht ... Habe ich da etwas verpasst?
Wie auch immer, wie lösen andere Leute dieses Problem?
Ja. Wenn Sie A löschen, kann B immer noch ohne Probleme existieren. Wenn Sie jedoch B löschen, kann A nicht existieren (weil es auf B zeigt, das nicht mehr existiert). Kaskadierte Löschvorgänge treten nur auf, wenn das Löschen eines Elements (B) dazu führt, dass ein anderes Element (A) inkorrekt ist oder eine Fremdschlüsseleinschränkung verletzt. – Flater