Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Daten aus DB löschen trotz Referenz zu anderer Tabelle


thomson1308 - Mi 11.09.13 08:11
Titel: Daten aus DB löschen trotz Referenz zu anderer Tabelle
Hi,

ich habe folgendes Script....


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public override void Process()
        {
            var t = Api.Session.Transaction;

         //Personen löschen die als Austrittsdatum älter 14 Tage haben
            var AustrittsDate = BOP.Person.stausdat <= DateTime.Today.AddDays(-14);

            foreach (var item in t.ForPerson.Select(AustrittsDate))
            {
                t.Delete(item);
            }

            t.Publish();
        }

Dieses löscht, klaro, alle Personen älter 14 Tage.
Jetzt haben manche Personen aber noch Referenzen zu anderen Tabellen und lassen sich deshalb nicht löschen.
Gibt es da eine Möglichkeit iwie zu sagen…lösch, egal was du für andere Tabellenbezüge hast?

Danke im Voraus


Th69 - Mi 11.09.13 09:30

Hallo und :welcome:

welche Datenbank verwendest du denn? Direkt von C# aus kannst du das Löschen nicht erzwingen, sondern dies geht nur direkt von der DB aus (wegen Integrität der Daten). Bei MS SQL Server gibt es bspw. das Markieren der Referenz-Tabelle(n) als "delete cascade", s Kaskadierende Einschränkungen der referenziellen Integrität [http://technet.microsoft.com/de-de/library/ms186973%28v=sql.105%29.aspx]. Im Detail wird darauf z.B. in Cascade delete option in SQL Server - Deleting multiple table records [http://venkattechnicalblog.blogspot.de/2010/04/cascade-delete-option-in-sql-server.html] eingegangen (beachte auch die beiden anderen Alternativen dort).


thomson1308 - Mi 11.09.13 09:49

Hi,
ja die DB ist MS SQL.

Ich Danke Dir, werde mir das mal durchlesen.


Gruß


Ralf Jansen - Mi 11.09.13 11:02

Bedenke auch das das ein gefährliches Feature ist wenn man das unbedacht einsetzt. Du währest nicht der erste der cascading deletes standardmäßig einsetzt und sich dann wundert warum er plötzlich seine Datenbank geleert hat obwohl er doch nur ganz unverfänglich einen harmlos aussehenden Datensatz löschen wollte. Durch cascading deletes verliert man Kontrolle.


thomson1308 - Mo 16.09.13 10:49

Ja, okay werde es bedenken.

Danke schön.