2012-11-02 22 views
6

के बीच कई से कई पर हटाएं मैं SQL सर्वर में एक ही तालिका के बीच कई से अधिक संबंध बनाने की कोशिश कर रहा हूं।कैस्केड एक ही तालिका

मेरे पास कॉलम ObjectId और Name कॉलम के साथ एक तालिका Object है।

संबंध इन नियमों का पालन करती:

  • एक बच्चे कई माता पिता
  • हो सकता है एक माता पिता के कई बच्चों
  • हो सकता है
  • ObjectA ObjectB और ObjectB का एक बच्चा हो सकता है ObjectA
  • का एक बच्चा हो सकता है
  • लेकिन एक वस्तु ही का एक सीधा बच्चा नहीं हो सकता

तो मैं एक दूसरी तालिका बनानेकॉलम ParentId और ChildId के साथऔर निश्चित रूप से मैं इन संबंधों को कैस्केड द्वारा हटा देना चाहता हूं।

लेकिन जब मैं एसक्यूएल सर्वर में इस कोशिश मैं

त्रुटि तालिका 'tblADMembership' पर चक्र या एक से अधिक झरना रास्तों का कारण हो सकता का परिचय विदेशी कुंजी बाधा 'FK_ObjectRelation_Object1' मिलता है। किसी भी कार्रवाई को हटाएं या अद्यतन पर कोई क्रिया निर्दिष्ट करें, या अन्य विदेशी कुंजी बाधाओं को संशोधित करें।

एसक्यूएल सर्वर कॉम्पैक्ट में मैं मिल

निर्देशात्मक संबंध एक चक्रीय संदर्भ जिसकी अनुमति नहीं है का परिणाम देगा।

मैं बहुत शोध किया है और मैं समझता हूँ कि मैं क्यों इन त्रुटियों को मिलता है, लेकिन वहाँ इस के चारों ओर एक रास्ता है कि यह भी एसक्यूएल सर्वर कॉम्पैक्ट (ताकि कोई संग्रहित प्रक्रियाओं) पर काम करेंगे है? या क्या इस रिश्ते को मॉडल करने का एक बेहतर तरीका है?

उत्तर

2

मैं खुद को एक ही समस्या में आया .... मैंने विदेशी कुंजी को हटा दिया। चक्रीय हटाने का तर्क कोड को धकेल दिया गया था।

0

मुझे वृक्षदृश्य के साथ एक ही समस्या थी। यह नष्ट करने के लिए है कि मेरे लिए उपयोगी था एक कोड है: (मैं मूल्य संपत्ति में आईडी बचाने के लिए और मैं एक इकाई मॉडल framwork उपयोग कर रहा हूँ को हटाने के लिए) हो सकता है कि किसी की मदद कर सकते हैं

private void removeRecursive(TreeNode parentToDelete) 
    { 
     foreach (TreeNode tn in parentToDelete.ChildNodes) 
      removeRecursive(tn); 

     long id = long.Parse(parentToDelete.Value); 
     Category deleteCat = context.Categories.Single(x => x.Id ==id); 
     context.Categories.DeleteObject(deleteCat); 
    } 

पीडी के बारे में खेद मेरी अंग्रेजी यह भयानक है ...

संबंधित मुद्दे