2 संबंधित डेटाबेस तालिकाओं है बुला जो की तरह सरलीकृत प्रपत्र नज़र में इसLINQ एसक्यूएल के लिए: निष्पादन आदेश जब SubmitChanges()
Product(
product_id,
name
)
ProductSpecs(
spec_id,
product_id,
name,
value
)
विदेशी कुंजी product_id क्षेत्र के माध्यम से सेट किया गया है और ProductSpecs मेज पर एक अद्वितीय बाधा (है product_id, नाम) जोड़ी।
अब मेरे एएसपी.नेट एमवीसी अनुप्रयोग में जब उपयोगकर्ता उत्पाद चश्मा संपादित करता है और डेटा बचाता है तो मैं पुराने चश्मा हटा देता हूं और सभी को नए के रूप में सम्मिलित करता हूं।
मैं इसे पहली बार DataContext.DeleteAllOnSubmit() को कॉल करके करता हूं और पैरामीटर के रूप में वर्तमान (पुराना) उत्पादस्पेक्स प्रदान करता हूं, और फिर मैं उत्पाद में नए चश्मा जोड़ता हूं। उत्पाद स्पेक्स संग्रह।
फिर मैं DataContext.SubmitChanges() को कॉल करता हूं और एक त्रुटि प्राप्त करता हूं कि मेरी अनूठी बाधा का उल्लंघन किया गया था।
DataContenxt.GetChangeText() द्वारा दिए गए SQL कथनों को देखकर मैं देख सकता हूं कि INSERT को DELETEs से पहले निष्पादित किया गया है (भले ही मैंने AddAllOnSubmit() को पहले जोड़ा है)।
इस व्यवहार का कारण क्या है और इसे कैसे ठीक किया जाए या इसे कैसे हल किया जाए?
धन्यवाद।
क्या आपने DeleteAllOnSubmit को कॉल करने के बाद सबमिटChanges() को कॉल करने का प्रयास किया है, लेकिन नए रिकॉर्ड जोड़ने से पहले? – RobS
इससे पहले कि मैं यह सुनिश्चित कर सकूं कि नए रिकॉर्ड डाले जाएंगे जो गलत है, इससे पहले यह रिकॉर्ड हटा देगा। या सबमिटChanges() को कॉल करने के बाद भी रोलबैक करने का कोई तरीका है? –
यदि आप डालने के लिए कोई नया रिकॉर्ड नहीं पाते हैं तो आप कॉल को एक लेन-देन और रोलबैक में लपेट सकते हैं। यद्यपि आप यह देखने के लिए जांच सकते हैं कि आपके पास हटाने से पहले नए रिकॉर्ड हैं या नहीं। – RobS