टेबल पर कनवर्ट करें और सेवचेंज मुझे आशावादी समरूपता अपवाद देता है

मैं एंटिटी फ्रेमवर्क 4 (स्वयं ट्रैकिंग इकाइयों का उपयोग करके) के साथ काम कर रहा हूं, और एक दृश्य तक पहुंच रहा हूं, जो दो तालिकाओं का विलय है। इसलिए जब मैं दृश्य की जानकारी अपडेट करता हूं, तो मैं दृश्य के एसटीई को भंडार में भेजता हूं जो डेटाबेस तक पहुंचता है।

मैंने निम्नलिखित किया है:

जब मैं अद्यतन जानकारी के साथ अपना विचार प्राप्त करता हूं, तो मैं अपना एसटीई 1 और एसटीई 2 बना देता हूं। जब मैं एक एसटीई बनाते हैं, यह एक अतिरिक्त राज्य के साथ बनाया जाता है। तो मैं इस दृष्टिकोण के एसटीई की स्थिति के बारे में कैसे जानता हूं कि राज्य संशोधित है, मैं अपने दो एसटीई की स्थिति को MarkedAsModified विधि के साथ बदलता हूं।

फिर, मेरे पास दो तालिकाओं की जानकारी के एसटीई में कैसे है, मैं दृश्य से जानकारी को सही एसटीई में पास करता हूं, और एसटीई से objectContext में परिवर्तन लागू करता हूं।

अंततः मैं saveChanges बना देता हूं। लेकिन इस चरण में मुझे एक <�कोड> आशावादी समरूपता अपवाद प्राप्त होता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि राज्य से एसटीई पास जोड़ा गया संशोधित तक है, इसलिए संदर्भ यह पता लगाता है कि सृजन और SaveChanges </के बीच कुछ संशोधन है। कोड>, लेकिन मैं एसटीई में AcceptChanges को भी आज़माएं, बाद में संशोधित के रूप में चिह्नित किया गया, और परिवर्तन लागू करें और अंत में SaveChanges , लेकिन समस्या बनी रहती है।

मैं समस्या को कैसे हल कर सकता हूँ! दृश्य और इकाई फ्रेमवर्क v4 के साथ काम करने का एक बेहतर तरीका है?

धन्यवाद। Daimroc।

संपादित करें 1: मुझे अभी भी समस्याएं हैं। मेरा कोड निम्नलिखित है:

घटक myComponent = नए घटक ();//यह एक एसटीई है myComponent.Rereference = myView.Reference; ...//अन्य गुण myComponent.MarkedAsModified ();//यह आवश्यक है क्योंकि मैं जानकारी अपडेट करना चाहता हूं, कोई नया रजिस्टर नहीं जोड़ना चाहता हूं। myContext.ApplyChanges ("घटक", myComponent); miContexto.SaveChanges ();

SaveChanges में, मुझे अपवाद मिलता है: पंक्तियों की एक अप्रत्याशित संख्या प्रभावित (0) को प्रभावित, सम्मिलित या हटाएं। इकाइयों को लोड होने के बाद से इकाइयों को संशोधित या हटा दिया गया हो सकता है। ऑब्जेक्टस्टेट प्रबंधक प्रविष्टियों को ताज़ा करें।

समस्या क्या है? क्या मैं एक नया एसटीई बनाया नहीं जा सकता?

धन्यवाद।

1
जोड़ा संपादित
विचारों: 2
क्या आप कोड ब्लॉक प्रदान कर सकते हैं ताकि हम देख सकें कि आप क्या करते हैं?
जोड़ा लेखक George Taskos, स्रोत

1 उत्तर

मुझे समस्या को हल करने का तरीका मिला है।

पहले समाधान में, समाधान डेटाबेस में मौजूदा रजिस्टरों को प्राप्त करने के लिए डेटा बेस पर एक क्वेरी बनाना था। यह संदर्भ में इकाइयों को जोड़ता है और फिर डेटा को संशोधित करना और परिवर्तनों को सही ढंग से सहेजना संभव है।

लेकिन बाद में, मुझे संदर्भ में संशोधित इकाइयों को जोड़ने के लिए क्वेरी बेस को क्वेरी बेस बनाने के लिए आवश्यक तरीके से बचने का तरीका मिला।

रास्ता निम्न कोड का उपयोग कर रहा है:

Customers myCustomer = new Customers  { IDCustomer = myCustomer.IDCustomer };
myContext.Customers.Attach(myCustomer);

//update the data of the entity.

myContext.SaveChanges();

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

बाद में, संदर्भ से जुड़ा हुआ है, और फिर संशोधित किया जा सकता है। जब कोई फ़ील्ड बदल जाता है, तो इकाई अपनी स्थिति को संशोधित करने के लिए बदलती है, इसलिए जब saveChanges() को कॉल किया जाता है, तो ईएफ इकाई को अद्यतन करता है, एक नया जोड़ने की कोशिश नहीं करता है।

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

1
जोड़ा
यह आंशिक समाधान है, मैं एसटीई का उपयोग करना चाहता हूं और चिह्नित एस्मोडिफाइड का उपयोग कर सकता हूं और फिर संदर्भ में परिवर्तन लागू कर सकता हूं।
जोड़ा लेखक Álvaro García, स्रोत