Autor Beitrag
alexander_
Hält's aus hier
Beiträge: 1



BeitragVerfasst: So 11.04.10 12:39 
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:

ausblenden volle Höhe C#-Quelltext
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
            {
                    //zu löschende Auswertung laden
                    var DB_deleteAuswertung = (from ac in rezeptdc.Auswertungen
                                               where ac.PK == PK
                                               select ac).First();

                    //Auswertesätze zur Auswertung löschen
                    var DB_deleteAuswerteSaetze = from sc in rezeptdc.Auswertesatz
                                                  where sc.FKAuswertung == DB_deleteAuswertung.PK
                                                  select sc;

                    //Grenzen und Parameter löschen zum Auswertesatz löschen
                    foreach (var auswerteSatz in DB_deleteAuswerteSaetze)
                    {
                        rezeptdc.AuswertungsGrenzen.DeleteAllOnSubmit(auswerteSatz.AuswertungsGrenzen);
                        rezeptdc.AuswertungsParameter.DeleteAllOnSubmit(auswerteSatz.AuswertungsParameter);
                    }

                    //Auswertesätze zur Auswertung löschen
                    rezeptdc.Auswertesatz.DeleteAllOnSubmit(DB_deleteAuswertung.Auswertesatz);

                    //Änderungen in DB übernehmen
                    rezeptdc.SubmitChanges();


                    //die Auswertung selber löschen
                    rezeptdc.Auswertungen.DeleteOnSubmit(DB_deleteAuswertung);


                    //Änderungen in DB übernehmen
                    rezeptdc.SubmitChanges();

                }

            catch (Exception ex)
            {
                //Fehler in Log-Datei wegschreiben
                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
ausblenden 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 user profile iconKha: C#-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 11.04.10 12:56 
:welcome:

Mir kommt es so vor, als ob du gerade das Rad neu erfinden würdest ;) . Alle FK-Constraints in der DB auf "ON DELETE CASCADE" setzen, Auswertung-Objekt löschen, fertig.

user profile iconalexander_ hat folgendes geschrieben Zum zitierten Posting springen:
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
Was sagt denn DB_deleteAuswertung.Auswertesatz an der Stelle, was die entsprechende Tabelle in der DB?

_________________
>λ=