इकाई फ्रेमवर्क 4, POCO ऑब्जेक्ट्स और ASP.Net MVC2। मेरे पास कई रिश्ते हैं, ब्लॉगपोस्ट और टैग संस्थाओं के बीच एक-दूसरे के बारे में बताते हैं। इसका मतलब यह है कि मेरे T4 ने POCO BlogPost क्लास को जनरेट किया है:
public virtual ICollection<Tag> Tags {
// getter and setter with the magic FixupCollection
}
private ICollection<Tag> _tags;
मैं ObjectContext के उदाहरण से एक BlogPost और संबंधित टैग के लिए पूछता हूं और इसे दूसरी परत पर भेजता हूं (MVC एप्लिकेशन में देखें)। बाद में मुझे बदले हुए गुणों और बदले हुए रिश्तों के साथ अपडेटेड ब्लॉगपोस्ट वापस मिल गया। उदाहरण के लिए इसमें "ए" "बी" और "सी" टैग थे, और नए टैग "सी" और "डी" हैं। मेरे विशेष उदाहरण में कोई नया टैग नहीं है और टैग के गुण कभी नहीं बदलते हैं, इसलिए केवल एक चीज जिसे सहेजा जाना चाहिए वह है परिवर्तित रिश्ते। अब मुझे इसे अन्य ObjectContext में सहेजने की आवश्यकता है। (अपडेट: अब मैंने उसी संदर्भ में करने की कोशिश की और असफल भी रहा।)
समस्या: मैं इसे ठीक से रिश्तों को बचाने के लिए नहीं बना सकता। मैंने जो कुछ भी पाया मैंने कोशिश की:
- नियंत्रक। UpdateModel और कंट्रोलर .ryUpdateModel काम नहीं करते।
- पुराने BlogPost को संदर्भ से प्राप्त करना तब संग्रह को संशोधित करना काम नहीं करता है। (अगले बिंदु से अलग तरीकों के साथ)
- यह शायद काम करेगा, लेकिन मुझे उम्मीद है कि यह सिर्फ एक समाधान है, समाधान नहीं :(।
- प्रत्येक संभावित संयोजनों में BlogPost और / या टैग के लिए संलग्न / जोड़ें / ChangeObjectState कार्य करने का प्रयास करें। अनुत्तीर्ण होना।
- ऐसा लगता है कि मुझे क्या चाहिए, लेकिन यह काम नहीं करता है (मैंने इसे ठीक करने की कोशिश की, लेकिन अपनी समस्या के लिए नहीं कर सकता)।
- ChangeState / Add / Attach / ... संबंध वस्तुओं को संदर्भ में लाने की कोशिश की। अनुत्तीर्ण होना।
"काम नहीं करता है" ज्यादातर मामलों में इसका मतलब है कि मैंने दिए गए "समाधान" पर काम किया जब तक कि यह कोई त्रुटि नहीं पैदा करता है और कम से कम ब्लॉगरोस्ट के गुणों को बचाता है। रिश्तों के साथ क्या होता है भिन्न होता है: आमतौर पर टैग को नए पीके के साथ टैग तालिका में फिर से जोड़ा जाता है और सहेजे गए ब्लॉगपोस्ट उन लोगों को संदर्भित करता है न कि मूल वाले। बेशक लौटे हुए टैग में PKs हैं, और इससे पहले कि मैं / PKs की जाँच करता / सहेजती / अपडेट करती हूं, वे डेटाबेस में मौजूद लोगों के बराबर हैं, इसलिए शायद EF को लगता है कि वे नई वस्तुएं हैं और उन PKs अस्थायी हैं।
एक समस्या जिसके बारे में मुझे पता है और एक स्वचालित सरल समाधान खोजना असंभव बना सकता है: जब एक POCO ऑब्जेक्ट का संग्रह बदल जाता है, जो कि उपर्युक्त आभासी संग्रह संपत्ति द्वारा होना चाहिए, क्योंकि तब FixupCollection ट्रिक दूसरे छोर पर रिवर्स संदर्भों को अपडेट कर देगी। कई-कई संबंधों के। हालाँकि जब कोई अद्यतन BlogPost ऑब्जेक्ट "व्यू" लौटाता है, तो ऐसा नहीं हुआ। इसका मतलब है कि शायद मेरी समस्या का कोई सरल समाधान नहीं है, लेकिन इससे मुझे बहुत दुःख होगा और मुझे EF4-POCO-MVC की जीत से नफरत होगी :(। इसके अलावा इसका मतलब यह होगा कि EF MVC वातावरण में ऐसा नहीं कर सकता है EF4 ऑब्जेक्ट प्रकार का उपयोग किया जाता है :(। मुझे लगता है कि स्नैपशॉट आधारित परिवर्तन ट्रैकिंग को यह पता लगाना चाहिए कि परिवर्तित ब्लॉगपोस्ट में मौजूदा पीके के साथ टैग के संबंध हैं।
Btw: मुझे लगता है कि एक ही समस्या एक-से-कई संबंधों के साथ होती है (Google और मेरे सहयोगी ऐसा कहते हैं)। मैं इसे घर पर कोशिश करूँगा, लेकिन फिर भी अगर वह काम करता है जो मेरे छह कई-से-कई रिश्तों में मेरी मदद नहीं करता है :(