هل يحذف الحذف من LinQ DB أيضا سجلات في جداول أخرى تحتوي على ارتباط مفاتيح أجنبي؟

StackOverflow https://stackoverflow.com/questions/2009327

سؤال

لذلك في جذر DB بلدي، لدي جدول "العميل". لدى العميل مفاتيح أجنبية ستذهب إلى حوالي 6-7 طاولات أخرى مثل الإيصالات والعناوين والمستندات وما إلى ذلك. إذا كنت لحذف عميل باستخدام Submitchanges ()، فهل سيستعرض جميع السجلات مع جمعية المفتاح الأجنبي وحذفها أيضا أو سأحتاج إلى القيام به مثل 6 استفسارات؟

هل كانت مفيدة؟

المحلول

لن يحدث هذا فقط إذا قمت بإعداد جداول قاعدة البيانات الخاصة بك للقيام بذلك مع حذف متتالية (أي on delete cascade).

لمزيد من المعلومات، يرجى الاطلاع إدراج العمليات وتحديثها وحذفها (LINQ إلى SQL):

لا يدعم LinQ إلى SQL أو التعرف على عمليات حذف Cascade. إذا كنت ترغب في حذف صف في جدول يحتوي على قيود على ذلك، فيجب عليك إما تعيين قاعدة حذف Cascade في قيد الإعداد الخارجي في قاعدة البيانات، أو استخدم الكود الخاص بك لأول مرة في حذف كائنات الطفل التي تمنع الوالد كائن من حذفه. خلاف ذلك، يتم طرح استثناء.

نصائح أخرى

أي نوع من الإجراءات التي تتسلل لديك على تلك العلاقات الرئيسية الأجنبية؟

بشكل افتراضي، لن يكون لمعظم أنظمة قاعدة البيانات (بما في ذلك SQL Server، والتي افترضت أنك تستخدمها) أي "حذف Cascade" أو أي إجراء آخر - لذلك في هذه الحالة، لن يحدث شيء.

سيوضح لك هذا الاستعلام T-SQL علاقاتك الرئيسية الخارجية وما إذا كان قد تم تحديد أي حذف أو تحديث إجراءات مرجعية أم لا:

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 قيود النزاهة المرجانية المتتالية لمزيد من التفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top