verwendetes Datenbanksystem: SQL Server 2008 Express
VS 2008 Linq2SQL
Hallo,
folgender Aufbau der Datenbank (siehe Bild).
Nun möchte ich eine Auswertung aus der DB löschen.
Folgender Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| public void DeleteAuswertungFromDB(int PK) {
try { var DB_deleteAuswertung = (from ac in rezeptdc.Auswertungen where ac.PK == PK select ac).First();
var DB_deleteAuswerteSaetze = from sc in rezeptdc.Auswertesatz where sc.FKAuswertung == DB_deleteAuswertung.PK select sc;
foreach (var auswerteSatz in DB_deleteAuswerteSaetze) { rezeptdc.AuswertungsGrenzen.DeleteAllOnSubmit(auswerteSatz.AuswertungsGrenzen); rezeptdc.AuswertungsParameter.DeleteAllOnSubmit(auswerteSatz.AuswertungsParameter); }
rezeptdc.Auswertesatz.DeleteAllOnSubmit(DB_deleteAuswertung.Auswertesatz);
rezeptdc.SubmitChanges();
rezeptdc.Auswertungen.DeleteOnSubmit(DB_deleteAuswertung);
rezeptdc.SubmitChanges();
}
catch (Exception ex) { HelperandErrorLogging.AddInfo(ref ex);
} } |
Ich hol mir aus der DB die Auswertung und lösche zunächst die untersten Tabellen (AuswertungsGrenzen, AuswertungsParameter) danach die Auswertungssätze und zum Schluss die Auswertung.
Allerdings bekomm ich beim letzten Submit folgende Fehlermeldung im Catch Block:
"Die DELETE-Anweisung steht in Konflikt mit der REFERENCE-Einschränkung 'FK_Auswertesatz_Auswertung'. Der Konflikt trat in der 'Magmess_local'-Datenbank, Tabelle 'dbo.Auswertesatz', column 'FKAuswertung' auf.
Die Anweisung wurde beendet."
Die zu löschende Auswertung habe ich gerade zuvor erzeugt (alles über denselben DataContext rezeptdc).
Warum merkt das Programm nicht, dass die Auswertesätze bereits gelöscht sind?
Ich habe vor der letzten LöschZeile (
rezeptdc.Auswertungen.DeleteOnSubmit(DB_deleteAuswertung);")
auch schon versucht das Objekt "DB_deleteAuswertung" nochmals aus der Datenbank zu laden
C#-Quelltext
1: 2: 3:
| DB_deleteAuswertung = (from ac in rezeptdc.Auswertungen where ac.PK == PK select ac).First(); |
- leider auch dasselbe Ergebnis.
Dank für alle Antworten
Gruß Alexander
Moderiert von
Kha: C#-Tags hinzugefügt