2010-08-18 13 views
11

मेरे पास यह सेवा है जो सिंगलटन और सिंगल थ्रेडेड है और कम मात्रा वाले ग्राहकों का समूह प्रदान करती है। यह SQL सर्वर में इकाई फ्रेमवर्क और डेटा का उपयोग करता है।इकाई फ्रेमवर्क (3.5) - परिवर्तनों को अस्वीकार करें

यदि डेटा सहेजने के क्लाइंट के अनुरोध में से कोई भी विफल रहता है, तो सभी बाद के अनुरोध विफल हो रहे हैं क्योंकि हर बार यह मूल विफल डेटा ऑब्जेक्ट को सहेजने का प्रयास कर रहा है।

विफल होने पर ईएफ डेटा में परिवर्तन पूर्ववत करने का कोई तरीका है?

अग्रिम धन्यवाद

उत्तर

4

प्रश्न का उत्तर "आप संदर्भ में परिवर्तन को त्याग नहीं सकते हैं" इसके बजाय किसी को ऑब्जेक्ट कॉन्टेक्स्ट को त्यागना होगा क्योंकि मार्क ने समझाया था।

11

इकाई-मॉडल/डेटा-संदर्भों/आदि सबसे अच्छा काम की इकाइयों के रूप में संभाला है। यदि आपको इसे रद्द करने की आवश्यकता है, तो बस संदर्भ को छोड़ दें और एक नए से शुरू करें। और यदि आप सफल होते हैं, वैसे भी इसे छोड़ दें! प्रत्येक अनुरोध वास्तव में, अलग डेटा-संदर्भों का उपयोग करते हुए किया जाना चाहिए अन्यथा आप समस्याओं की एक सीमा प्राप्त कर सकते हैं:

  • सूत्रण वहाँ (हालांकि यह लग रहा है कि आप इसे एकल पिरोया बनाकर इस बचा है)
  • डेटा विकास (एक पहचान प्रबंधक है, हर पंक्ति आप को छूने आसपास रहता है; कई बार, वास्तव में)
  • सामान्य अलगाव आदि
  • कनेक्शन जीवन प्रबंधन (एक खुले कनेक्शन का अकेले)
  • आदि
+0

हाँ मुझे बहुत देर हो गई .. लेकिन समस्या यह है कि यदि आप ऑब्जेक्ट संदर्भ का निपटान करते हैं और डेटाबेस से कनेक्ट करने का प्रयास करते हैं, तो प्रदर्शन बहुत खराब होता है। तो हमने ऑब्जेक्ट संदर्भ को जीवित रखने का फैसला किया। एक विफलता के मामले में हम एक रास्ता खोजने के लिए प्रयास कर सकते हैं। – Bhuvan

+0

@ भुवन - "प्रदर्शन खराब है" दावा आमतौर पर इसका मतलब है कि आप डेटा से अधिक पूछताछ कर रहे हैं। मैंने ** बहुत सारे काम किए हैं जहां डेटा-संदर्भ बहुत कसकर स्कॉप्ड किया गया है, और यह पूरी तरह से प्रदर्शन करने वाला है। –

3

आप

context.Refresh(RefreshMode.StoreWins, entity) 

फोन करके इकाई ताज़ा कर सकते हैं तो मैं RejectChanges की कोई आवश्यकता नहीं देखते हैं।

+0

धन्यवाद स्वेन .. लेकिन इसके साथ समस्या यह है कि किसी को यह ट्रैक रखना होगा कि कौन सी संस्थाएं बदली गई हैं। मेरे पास ऐसी इकाइयों की एक श्रृंखला है जो विफल होने पर प्रतिबद्ध या अस्वीकार करने की आवश्यकता होती है। मुझे लगता है कि एमएस को इसे संभालने का एक बेहतर तरीका प्रदान करना है। – Bhuvan

8

नोट: यदि आप आसान एक आकर्षण के रूप में एफई 4.1 या 4.2 जो इस काम में आता है करने के लिए उन्नयन कर सकते हैं:

context.Entry(myEntity).State = EntityState.Unchanged; 

कृपया विस्तार के लिए this को देखें। ऊपर

Public ReadOnly Property DirtyObjects() As IEnumerable(Of ObjectStateEntry) 
    Get 
    Return ObjectStateManager.GetObjectStateEntries(
     EntityState.Added Or 
     EntityState.Deleted Or 
     EntityState.Modified) 
    End Get 
End Property 


Public Overloads Sub Refresh() 
    For Each entry In DirtyObjects 
    Select Case entry.State 

     Case EntityState.Modified 
     Dim original = entry.OriginalValues 
     For Each prop In entry.GetModifiedProperties() 
      Dim ordinal = original.GetOrdinal(prop) 
      entry.CurrentValues.SetValue(ordinal, original(ordinal)) 
      RaisePropertyChanged(entry.Entity, prop) 
     Next 
     entry.AcceptChanges() 
     Case EntityState.Deleted 
     'I think I would need to call the above again, cuz it might be 
     'changed values on a Deleted-state entry too. 
     entry.ChangeState(EntityState.Unchanged) 
     Case EntityState.Added 
     entry.ChangeState(EntityState.Detached) 
     Case Else 
     'do nothing 
     Debug.Fail("It's not supposed to stop here.") 
    End Select 
    Next 
End Sub 

प्रमुखों: - (आसानी से सी # करने के लिए लिखित जाना चाहिए वीबी, खेद)

अपने ObjectContext उत्पन्न वर्ग के लिए एक आंशिक वर्ग बनाएँ, और उस में निम्न विधियों में शामिल हैं! नए आने वाले संस्करण में यह सुविधा बहुत आसान हो गई है।

+1

। धन्यवाद .. महान समाधान ... – Bhuvan

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