मैं बाहरी एपीआई से मूवी डेटा प्राप्त करता हूं। पहले चरण में मैं प्रत्येक फिल्म को परिमार्जन करूँगा और इसे अपने डेटाबेस में डालूँगा। दूसरे चरण में मैं समय-समय पर एपीआई के "परिवर्तन" एपीआई का उपयोग करके अपने डेटाबेस को अपडेट करूंगा, जो मैं यह देखने के लिए क्वेरी कर सकता हूं कि फिल्मों ने अपनी जानकारी बदल दी है।
My ORM लेयर Entity-Framework है। मूवी वर्ग इस तरह दिखता है:
class Movie
{
public virtual ICollection<Language> SpokenLanguages { get; set; }
public virtual ICollection<Genre> Genres { get; set; }
public virtual ICollection<Keyword> Keywords { get; set; }
}
समस्या तब होती है जब मेरे पास एक फिल्म होती है जिसे अपडेट करने की आवश्यकता होती है: मेरा डेटाबेस ट्रैक की जा रही वस्तु के बारे में सोचेगा और नए एपीआई कॉल से प्राप्त नई वस्तु को अलग-अलग ऑब्जेक्ट के रूप में अवहेलना करता है .Equals()
।
यह एक समस्या का कारण बनता है क्योंकि जब मैं अब अद्यतन मूवी के साथ डेटाबेस को अपडेट करने का प्रयास करता हूं, तो यह मौजूदा मूवी को अपडेट करने के बजाय इसे सम्मिलित करेगा।
भाषाओं के साथ मेरे पास यह मुद्दा था और मेरा समाधान संलग्न भाषा की वस्तुओं की खोज करना था, उन्हें संदर्भ से अलग करना, उनके पीके को अद्यतन वस्तु में ले जाना और उस संदर्भ में संलग्न करना था। जब SaveChanges()
अब निष्पादित किया जाता है, तो यह अनिवार्य रूप से इसे बदल देगा।
यह एक बदबूदार दृष्टिकोण है क्योंकि अगर मैं अपनी Movie
वस्तु के लिए इस दृष्टिकोण को जारी रखता हूं , तो इसका मतलब है कि मुझे फिल्म, भाषा, शैली और कीवर्ड को अलग करना होगा, डेटाबेस में हर एक को देखना होगा, अपनी आईडी ट्रांसफर करना होगा और सम्मिलित करना होगा नई वस्तुओं।
क्या इसे और अधिक सुरुचिपूर्ण ढंग से करने का कोई तरीका है? आदर्श रूप से मैं केवल अद्यतन फिल्म को संदर्भ में पास करना चाहता हूं और यह है कि Equals()
विधि के आधार पर अपडेट करने के लिए सही मूवी का चयन करें , अपने सभी क्षेत्रों को अपडेट करें और प्रत्येक जटिल ऑब्जेक्ट के लिए: अपने स्वयं के Equals()
तरीके के आधार पर फिर से मौजूदा रिकॉर्ड का उपयोग करें और सम्मिलित करें यह अभी तक मौजूद नहीं है।
मैं .Update()
प्रत्येक जटिल ऑब्जेक्ट पर विधियों को प्रदान करके डिटैचिंग / अटैचमेंट को छोड़ सकता हूं, जिसे मैं सभी संलग्न ऑब्जेक्ट्स को पुनः प्राप्त करने के संयोजन में उपयोग कर सकता हूं, लेकिन इसके बाद भी मुझे हर एक मौजूदा ऑब्जेक्ट को फिर से अपडेट करने की आवश्यकता होगी।
id
और बाहरी API से फिल्मों का उपयोग स्थानीय लोगों से मेल खाता है tmdbid
। मैं उन सभी संस्थाओं को पुनः प्राप्त नहीं कर सकता, जिन्हें एक कॉल में अपडेट करने की आवश्यकता है क्योंकि यह फिल्मों, शैलियों, भाषाओं, कीवर्ड्स आदि के बारे में है, इनमें से प्रत्येक में पीके है और डेटाबेस में पहले से मौजूद हो सकता है।