मुझे एक चुनौतीपूर्ण समस्या है जहां मैं एक टेबल का संदर्भ देने वाली सभी विदेशी कुंजी खोजने के लिए अपने एंटिटी फ्रेमवर्क मैपिंग पर प्रतिबिंब का उपयोग करना चाहता हूं, और मुझे कॉलम के नाम चाहिए वह विदेशी कुंजी हैं।इकाई फ्रेमवर्क - विदेशी कुंजी और रिश्तों/संघों पर प्रतिबिंबित
another post on SO के अनुसार, मैं आसानी से प्रतिबिंब के माध्यम से तालिका पर नेविगेशन गुणों को आसानी से पा सकता हूं। लेकिन यह मुझे उस संपत्ति या कॉलम का नाम नहीं देता है जिसमें विदेशी कुंजी मान शामिल है।
कारण मैं ऐसा करने की कोशिश कर रहा हूं कि मेरे पास बड़ी संख्या में टेबल (लगभग 40) हैं जो वस्तुओं की एक तालिका का संदर्भ देते हैं। आइए मान लें कि उपयोगकर्ता "एंड्यू" नामक आइटम टेबल में एक नया मान डालता है और बाद में एक व्यवस्थापक नोटिस करता है कि यह वास्तव में पहले से मौजूद आइटम "एंड्रयू" के लिए वास्तव में एक टाइपो है। अब मैं "एंड्यू" के सभी संदर्भ ढूंढना चाहता हूं और उन संदर्भों को "एंड्रयू" में बदलना चाहता हूं। मैं इसे प्रभावी ढंग से करना पसंद करूंगा, इसलिए रिवर्स-नेविगेशन गुणों का उपयोग करना बहुत धीमा होगा क्योंकि आपको उन्हें संशोधित करने से पहले मानों को लोड करना होगा। मैं जो करना चाहता हूं वह टेबल और कॉलम की एक सूची को प्रतिबिंबित करने में सक्षम है, फिर अद्यतन आदेश सीधे डेटाबेस पर जारी करें। यह कुछ इस तरह दिखेगा:
var command = String.Format("UPDATE [{0}] SET [{1}] = {{1}} WHERE [{1}] = {{0}}; ", fk.FromTableName, fk.FromColumnName);
dataContext.ExecuteStoreCommand(command, new Object[] { oldID, newID });
LINQ में LINQ स्वत: जनरेट कोड पर SQL को यह वास्तव में बहुत आसान था ... प्रतिबिंब के 20 लाइनों और मैंने किया था, लेकिन हम एफई के लिए हाल ही में बंद है और मैं ईएफ के माध्यम से विदेशी कुंजी कॉलम के नाम नहीं मिल सकते हैं।
मैं जो खोज रहा हूं उसका सरलीकृत उदाहरण: यदि मेरे पास प्रबंधक नामक एक नेविगेशन संपत्ति के साथ कर्मचारी नामक वस्तु है और प्रबंधक आईडी की एक विदेशी कुंजी है, तो मैं जानना चाहता हूं कि प्रबंधक मेरी नेविगेशन संपत्ति और अंतर्निहित भंडारण है प्रबंधक आईडी संपत्ति है। मैं इसे प्रतिबिंब या मेटाडेटा के माध्यम से सख्ती से करना चाहता हूं ताकि मैं इससे एक द्विपक्षीय क्वेरी बना सकूं।
आपको नीचे वोट मिला है, इसलिए मुझे लगता है कि मैं केवल एक ही समस्या नहीं है जिसे आप समझते हैं कि आप क्या कर रहे हैं। क्या आप बस 'कर्मचारी .managerId' या 'कर्मचारी.manager.id' कर सकते हैं? आपको पता होना चाहिए कि सम्मेलन क्या है, आपका डीबीए किसी भी तरह से आपकी परियोजना को प्रभावित करने के बिना बस डीबी को बस नहीं बदल सकता है। – Eonasdan
@Eonasdan - धन्यवाद। मैं सोच रहा था कि मुझे क्यों गिरा दिया गया था। मैं आशा करता हूं कि पूरी तरह से इसे और अधिक स्पष्ट कर दें। दुर्भाग्यवश अब यह बहुत लंबा है, और मैं इसे छोटा रखने की कोशिश कर रहा था। – pbarranis