9

मेरे पास एक सारणी है जिसमें एक सामान्य कॉलम वाली तालिका पर एक अद्वितीय अनुक्रमणिका है। उदाहरण के लिए तालिका निम्न स्तंभ होंगे:डीबीकॉन्टेक्स्ट सेव चेंज ऑर्डर ऑफ स्टेटमेंट एक्जिक्यूशन

TableID, ID1 आईडी 2, क्रमवार

अद्वितीय सूचकांक कॉलम ID1 आईडी 2, क्रमसंख्या के पार है।

मेरी समस्या यह है कि डेटाबेस से रिकॉर्ड हटाने पर मैं नियमों को फिर से समझता हूं ताकि वे फिर से अनुक्रमिक हो सकें। मेरे हटाने समारोह इस तरह दिखेगा:

public void Delete(int id) 
    { 
     var tableObject = Context.TableObject.Find(id); 
     Context.TableObject.Remove(tableObject); 
     ResequenceOrdinalsAfterDelete(tableObject); 
    } 

मुद्दा है कि जब मैं Context.SaveChanges() यह अद्वितीय सूचकांक टूट जाता है के रूप में यह एक अलग क्रम में स्टेटमेंट्स को निष्पादित करने की तुलना में वे पारित किए गए लगता है कहते हैं। उदाहरण के लिए निम्न होता है:

  1. resequence ऑर्डिनल्स
  2. रिकॉर्ड हटाएं

के बजाय:

  1. रिकॉर्ड
  2. resequence ऑर्डिनल्स हटाएँ

क्या यह ईएफ का सही व्यवहार है? और यदि ऐसा है, तो निष्पादन के आदेश को मजबूर करने के लिए इस व्यवहार को ओवरराइड करने का कोई तरीका है?

मैं ठीक से इस समझाया नहीं किया है, तो कृपया मुझे बताएं ...

उत्तर

9

आदेशों के आदेश पूरी तरह से एफई के नियंत्रण में है। एक ही तरीका है आप कैसे प्रभावित कर सकते हैं कि हर ऑपरेशन के लिए अलग SaveChanges उपयोग कर रहा है:

public void Delete(int id) 
{ 
    var tableObject = Context.TableObject.Find(id); 
    Context.TableObject.Remove(tableObject); 
    Context.SaveChanges(); 
    ResequenceOrdinalsAfterDelete(tableObject); 
    Context.SaveChanges(); 
} 

आप मैन्युअल रूप से बनाए गए लेन-देन में उस कोड चलाना चाहिए atomicity सुनिश्चित करने के लिए (=>TransactionScope)।

लेकिन सबसे अच्छा समाधान शायद संग्रहीत प्रक्रिया का उपयोग करेगा क्योंकि आपके शोधन को डेटाबेस से सभी प्रभावित रिकॉर्ड्स को आपके एप्लिकेशन में खींचना होगा, उनके क्रमिक को बदलना होगा और उन्हें डेटाबेस में एक-एक करके सहेजना होगा।

बीटीडब्ल्यू। डेटाबेस गंध के साथ ऐसा कर रहा हूँ। आपके "ordinal" अनुक्रम में अंतर होने में समस्या क्या है?

+0

उत्तर के लिए हाय धन्यवाद! मैंने इसे पहले डेटाबेस के साथ कार्यान्वित किया है और जैसा कि आपने कहा है कि यह बदबू आ रही है। कोड भयानक है और दर्द था, साथ ही यह केवल व्यवस्थापक अनुभाग से ही पहुंच योग्य होगा और छोटी मात्रा में बदलाव करेगा। शोधकर्ताओं के लिए मुख्य कारण यह है कि प्रशासनिक उपयोगकर्ता कई तालिकाओं पर ऑर्डर सेट कर सकते हैं और अंतराल को देखते समय चुनिंदा या भ्रमित हो जाते हैं ... एक बमर का बिट जो ईएफ आपके द्वारा प्रदान किए जाने वाले क्रम में निष्पादित नहीं करता है। – didiHamman

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