Ist das Löschen von einer LINQ DB löscht auch Datensätze in anderen Tabellen, die einen Fremdschlüssel Verband haben?
-
18-09-2019 - |
Frage
So an der Wurzel meiner DB habe ich eine Tabelle „Kunde“. Der Kunde hat Fremdschlüssel auf etwa 6-7 weitere Tische gehen wie Quittungen, Adressen, Dokumente usw. Wenn ich einen Kunden mit SubmitChanges löschen waren () wäre, dass alle diese Datensätze mit dem Fremdschlüssel Verein suchen und löschen Sie sie auch, oder brauche ich, um wie 6-Abfragen zu tun?
Lösung
Dies geschieht nur, wenn Sie Ihre Datenbank-Tabellen eingerichtet haben, dies zu tun mit Cascading Deletionen (d on delete cascade
).
Weitere Informationen finden Sie unter Einfügen, Aktualisieren und Löschen von Operationen (LINQ to SQL) :
LINQ to SQL nicht unterstützt oder erkennen kaskadenLöschVorgänge. Wenn Sie eine Zeile in einer Tabelle löschen das hat Einschränkungen dagegen, Sie muß entweder die ON DELETE CASCADE eingestellt herrschen in dem Fremdschlüssel-Constraint in die Datenbank, oder verwenden Sie Ihren eigenen Code Löschen Sie zuerst die untergeordneten Objekte, dass verhindern, dass das übergeordnete Objekt entfernt, gelöscht. Andernfalls ist eine Ausnahme geworfen.
Andere Tipps
Welche Kaskade Aktion haben Sie auf diesen Fremdschlüsselbeziehungen ??
Standardmäßig sind die meisten Datenbanksysteme (einschließlich SQL Server, die ich nehme an, Sie verwenden) nicht irgendwelche „ON DELETE CASCADE“ oder eine andere Aktion -. So in diesem Fall nichts passieren würde,
Diese T-SQL-Abfrage werden Ihnen Ihre Fremdschlüsselbeziehungen zeigt, und ob von einer DELETE oder UPDATE referenziellen Aktionen definiert:
SELECT
name 'FK Constraint',
OBJECT_NAME(parent_object_id) 'Parent table',
OBJECT_NAME(referenced_object_id) 'Referenced table',
delete_referential_action ,
delete_referential_action_desc ,
update_referential_action ,
update_referential_action_desc
FROM
sys.foreign_keys
Wenn Sie wollen etwas passiert, Sie müssen sicherstellen, werden diese FK Beziehungen gesetzt, diese kaskadierende Aktionen verwenden.
Sehen Sie MSDN-Dokumentation auf Cascading Referentielle Integritätsbedingungen mehr Details.