2010-01-18 12 views
6

का उपयोग कर रिकॉर्ड हटाने में त्रुटि मुझे हाल ही में एक क्लाइंट से एक त्रुटि रिपोर्ट मिली है और मुझे कोई भाग्य हल करने में कोई भाग्य नहीं है। मुझे आशा है कि कोई मुझे गलत समझने के लिए कुछ अंतर्दृष्टि दे सकता है।Linq2SQL

त्रुटि लगता है काफी सरल:

Csla.DataPortalException: DataPortal.Delete में विफल रहा है (System.InvalidOperationException: अनुक्रम System.Linq.Enumerable.SingleOrDefault [TSource] (IEnumerable`1 स्रोत में एक से अधिक तत्व शामिल हैं)

यहाँ (मेरे DataPortal_Delete विधि है, जो एक पैरामीटर के रूप में FileId (पी) लेता है।

private void DataPortal_Delete(SingleCriteria<File, Guid> criteria) 
    { 
     using (var ctx = ContextManager<Ronin.Data.RoninDataContext> 
        .GetManager(Database.ApplicationConnection, false)) 
     { 
      var data = ctx.DataContext.Files 
        .Single(row => row.FileId == criteria.Value); 

      ctx.DataContext.FileSources.DeleteAllOnSubmit(data.FileSources); 

      ctx.DataContext.Files.DeleteOnSubmit(data); 

      ctx.DataContext.SubmitChanges(); 
     } 
    } 

पहली बात मैं जाँच अगर वहाँ एक ही FileId के साथ एक और रिकॉर्ड था देखने के लिए गया था, हालांकि प्रथम जा रहा है आरई कुंजी, यह असंभव होना चाहिए)। सभी फाइल आईडी वास्तव में अद्वितीय थे। मैंने क्लाइंट डेटाबेस से कनेक्ट होने वाला एप्लिकेशन लॉन्च किया और रिकॉर्ड को हटाने की कोशिश की और यह बिना किसी समस्या के काम किया। क्लाइंट साइट पर आईटी लड़के ने उपयोगकर्ता द्वारा उठाए गए कार्यों के चरण-दर-चरण स्क्रीनशॉट भेजने के लिए "समस्या चरण रिकॉर्डर" का उपयोग किया। साधारण से कुछ भी नहीं, और जब उसने एक अलग मशीन का इस्तेमाल किया, तो वह बिना किसी त्रुटि के रिकॉर्ड को हटाने में सक्षम था। स्पष्ट रूप से यह तब होता है जब एप्लिकेशन विंडोज 7 में चलाया जाता है।

यह कहा गया कि किसी भी विचार के कारण यह क्या हो सकता है?

+0

फ़ाइलें.FileId उस तालिका पर प्राथमिक कुंजी है? –

+0

क्या आप वाकई इस कोड स्निपेट द्वारा त्रुटि उत्पन्न कर रहे हैं? त्रुटि सिंगलऑर्डफॉल्ट का संदर्भ दे रही है, लेकिन फ़ंक्शन सिंगल का उपयोग कर रहा है। – gfrizzle

+0

फाइल स्रोत नल हैं? यदि ये अलग-अलग वस्तुएं हैं, तो क्या आपको उन्हें हटाने से पहले उन्हें प्राप्त करने के लिए शामिल करना नहीं है? – awright18

उत्तर

1

समस्या के स्रोत एकल के लिए कॉल यह मानते हुए है, के बजाय:

ctx.DataContext.Files.Single(...) 

परिवर्तन कोड कि क्वेरी से कई पंक्तियों की वापसी की अनुमति के लिए और फिर लॉग इन करें यह क्या है जब यह अधिक से अधिक रिटर्न लौटा रहा है एक पंक्ति यह आपको अपनी "डुप्लिकेट" डेटा समस्या की ओर इंगित करना चाहिए।

देखने के लिए एक और चीज एसक्यूएल है जो दृश्यों के पीछे उत्पन्न हो रही है। यकीन नहीं है कि मदद मिलेगी, लेकिन यह चोट नहीं पहुंचा सकता है। मुझे आपका डेटा मॉडल नहीं पता है, इसलिए मैं आपके कोड को समझ नहीं सकता हूं और साथ ही मैं चाहता हूं।

+0

वहां अपवाद संदेश बहुत स्पष्ट है; एकल इस तथ्य को लागू करता है कि केवल एक पंक्ति लौटा दी जाएगी। दो या दो से अधिक अपवाद का कारण बन जाएगा। हालांकि मैं कोड नहीं बदलूंगा; एक साधारण एसक्यूएल कथन को डुप्ले मिलेगा: 'फाइलिड का चयन करें, फ़ाइल समूह से गिनती (*) गिनती (*)> 1' – Andy

0

यदि यह केवल विंडोज 7 में होता है तो यह ओएस के कारण हो सकता है। क्या आपने Vista पर कोशिश की है? विस्टा का वातावरण विंडोज 7 पर समान है। आप विंडोज वर्चुअल पीसी + एक्सपी मोड का भी उपयोग कर सकते हैं। यह वर्चुअलाइजेशन एप्लिकेशन विशेष रूप से विंडोज 7 के लिए डिज़ाइन किया गया है ताकि उपयोगकर्ता विंडोज़ XP में एप्लिकेशन जैसे एप्लिकेशन चला सकें। नोट: एक्सपी मोड वर्चुअलाइजेशन सक्षम प्रोसेसर की आवश्यकता है।

0

एक इकाई को हटाते समय मुझे एक ही अपवाद था। समस्या dbml -File में परिभाषित एक विदेशी कुंजी संबंध साबित हुई। तो यह मेरे मामले में अपवाद का कारण था। जब मैंने हटा दिया कि यह रिकॉर्ड को हटाने के लिए काम करता है (और मैं अन्य तालिका से रिकॉर्ड्स को कैस्केड करना नहीं चाहता था, तो मुझे केवल विदेशी कुंजी कॉलम को सेट करने के लिए linq-to-sql को कॉन्फ़िगर करने के तरीके को जानने की आवश्यकता है शून्य)

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