LINQ से SQL कनेक्शन (SQL सर्वर कॉम्पेक्ट एडिशन के खिलाफ) के साथ एक जोड़े के गुणों को अपडेट करने के बाद DataContext को SubmitChanges निष्पादित करते समय मुझे "पंक्ति नहीं मिली या परिवर्तित नहीं हुई।" ChangeConflictException।
var ctx = new Data.MobileServerDataDataContext(Common.DatabasePath);
var deviceSessionRecord = ctx.Sessions.First(sess => sess.SessionRecId == args.DeviceSessionId);
deviceSessionRecord.IsActive = false;
deviceSessionRecord.Disconnected = DateTime.Now;
ctx.SubmitChanges();
क्वेरी निम्न SQL उत्पन्न करता है:
UPDATE [Sessions]
SET [Is_Active] = @p0, [Disconnected] = @p1
WHERE 0 = 1
-- @p0: Input Boolean (Size = 0; Prec = 0; Scale = 0) [False]
-- @p1: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:12:02 PM]
-- Context: SqlProvider(SqlCE) Model: AttributedMetaModel Build: 3.5.21022.8
स्पष्ट समस्या WHERE 0 = 1 है , रिकॉर्ड लोड होने के बाद, मैंने पुष्टि की है कि "deviceSessionRecord" में सभी गुण प्राथमिक कुंजी को शामिल करने के लिए सही हैं। "ChangeConflictException" को पकड़ने पर भी, इस बारे में कोई अतिरिक्त जानकारी नहीं है कि यह विफल क्यों हुआ। मैंने यह भी पुष्टि की है कि इस अपवाद को डेटाबेस में ठीक एक रिकॉर्ड के साथ फेंक दिया गया है (जिस रिकॉर्ड को मैं अपडेट करने का प्रयास कर रहा हूं)
यह अजीब है कि कोड के एक अलग अनुभाग में मेरे पास एक समान अपडेट स्टेटमेंट है और यह निम्न एसक्यूएल उत्पन्न करता है और वास्तव में मेरे एसक्यूएल सर्वर कॉम्पैक्ट संस्करण डेटाबेस को अपडेट करता है।
UPDATE [Sessions]
SET [Is_Active] = @p4, [Disconnected] = @p5
WHERE ([Session_RecId] = @p0) AND ([App_RecId] = @p1) AND ([Is_Active] = 1) AND ([Established] = @p2) AND ([Disconnected] IS NULL) AND ([Member_Id] IS NULL) AND ([Company_Id] IS NULL) AND ([Site] IS NULL) AND (NOT ([Is_Device] = 1)) AND ([Machine_Name] = @p3)
-- @p0: Input Guid (Size = 0; Prec = 0; Scale = 0) [0fbbee53-cf4c-4643-9045-e0a284ad131b]
-- @p1: Input Guid (Size = 0; Prec = 0; Scale = 0) [7a174954-dd18-406e-833d-8da650207d3d]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:20:50 PM]
-- @p3: Input String (Size = 0; Prec = 0; Scale = 0) [CWMOBILEDEV]
-- @p4: Input Boolean (Size = 0; Prec = 0; Scale = 0) [False]
-- @p5: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:20:52 PM]
-- Context: SqlProvider(SqlCE) Model: AttributedMetaModel Build: 3.5.21022.8
मैंने पुष्टि की है कि LINQ क्लासेस बनाने वाले डेटाबेस स्कीमा और DBML दोनों में उचित प्राथमिक फ़ील्ड मानों की पहचान की गई है।
मुझे लगता है कि यह लगभग एक दो हिस्सा सवाल है:
- अपवाद क्यों फेंका जा रहा है?
- उत्पन्न SQL के दूसरे सेट की समीक्षा करने के बाद, ऐसा लगता है कि संघर्ष का पता लगाने के लिए सभी क्षेत्रों की जांच करना अच्छा होगा, लेकिन मुझे लगता है कि यह काफी अक्षम होगा। क्या इस तरह से यह हमेशा काम करता है? क्या प्राथमिक कुंजी की जांच करने के लिए एक सेटिंग है?
मैं पिछले दो घंटों से इससे लड़ रहा हूं इसलिए किसी भी मदद की सराहना की जाएगी।