したがって、DB のルートには「Customer」というテーブルがあります。顧客は、領収書、住所、ドキュメントなどの約 6 ~ 7 個の他のテーブルにアクセスする外部キーを持っています。SubmitChanges() を使用して顧客を削除すると、外部キーの関連付けを持つすべてのレコードが検索され、それらも削除されます。または、6つのクエリを実行する必要がありますか?
2 に答える
これは、カスケード削除を使用してこれを行うようにデータベーステーブルを設定した場合にのみ発生します(つまりon delete cascade
)。
詳細については、挿入、更新、および削除操作(LINQ to SQL)を参照してください。
LINQ to SQLは、カスケード削除操作をサポートまたは認識しません。制約のあるテーブルの行を削除する場合は、データベースの外部キー制約でON DELETE CASCADEルールを設定するか、独自のコードを使用して、親を妨げる子オブジェクトを最初に削除する必要があります。オブジェクトが削除されないようにします。それ以外の場合は、例外がスローされます。
それらの外部キー関係に対してどのようなカスケードアクションがありますか?
デフォルトでは、ほとんどのデータベースシステム(SQL Serverを含む)には「ONDELETE CASCADE」やその他のアクションはありません。その場合、何も起こりません。
このT-SQLクエリは、外部キーの関係と、DELETEまたはUPDATEの参照アクションが定義されているかどうかを示します。
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
何かを起こさせたい場合は、それらのFK関係がそれらのカスケードアクションを使用するように設定されていることを確認する必要があります。
詳細については、カスケード参照整合性制約に関するMSDNドキュメントを参照してください。