/ / एंटिटी फ्रेमवर्क 4.0 मॉडल में SQL सर्वर XML डेटा प्रकार कैसे निर्दिष्ट करें? - .net, xml, एंटिटी-फ्रेमवर्क, एंटिटी-फ्रेमवर्क -4

इकाई फ्रेमवर्क 4.0 मॉडल में SQL सर्वर XML डेटा प्रकार कैसे निर्दिष्ट करें? --नेट, एक्सएमएल, इकाई-ढांचा, इकाई-ढांचा -4

मैं Entity चौखटे 4 का उपयोग कर एक ORM बना रहा हूं।मॉडल-प्रथम पैटर्न में 0 (CTP5)। मेरी कुछ संस्थाओं में जटिल (ऑब्जेक्ट ट्री) गुण हैं जो ORM इकाइयां होने की आवश्यकता नहीं है - वे "केवल बैक-एंड सर्वर सिस्टम के लिए रुचि रखते हैं जो इस डेटाबेस का उपयोग करते हैं, न कि इस डेटाबेस का उपयोग करने वाले क्लाइंट के लिए।

मैं बस संपत्ति के पेड़ को धारावाहिक कर सकता थाएक स्ट्रिंग के नीचे और इसे एक स्ट्रिंग के रूप में DB में संग्रहीत करें, लेकिन SQL सर्वर XML डेटा प्रकार वास्तव में आकर्षक है। एक बुद्धिमान तरीके से XML डेटा सामग्री पर क्वेरी करने में सक्षम होने के लिए बहुत अच्छा होगा।

हालांकि, मैं यह निर्दिष्ट करने के लिए कोई रास्ता नहीं देखता कि मुझे Visual Studio Entity Modeler में XML डेटा टाइप चाहिए।

इसे निर्दिष्ट करने का एकमात्र तरीका हैमॉडल में स्ट्रिंग फ़ील्ड, DDL का उत्सर्जन करें, फिर स्ट्रिंग फ़ील्ड को XML फ़ील्ड में बदलने के लिए DDL को संशोधित करें? यह अजीब और भंगुर लगता है, एक बार लिखो, कभी नहीं बदल सकता है। क्या कोई बेहतर तरीका है?

उत्तर:

जवाब के लिए 9 № 1

"एंटिटी फ्रेमवर्क 4.0 रेसिपीज़" में लैरी टेनी और जीशान हिरानी बताते हैं कि एक्सएमएल डेटा प्रकार केवल एफए 4.0 द्वारा समर्थित नहीं हैं।

वे एक वैकल्पिक हल प्रदान करते हैं, जिसे बनाना हैमॉडल निजी द्वारा उत्पन्न इकाई वर्ग पर स्ट्रिंग प्रकार की संपत्ति और आंतरिक स्ट्रिंग संपत्ति से एक XElement वापस करने के लिए एक नई संपत्ति (इकाई वर्ग के अपने स्वयं के आंशिक वर्ग में) बनाएँ:

public partial class Candidate
{
private XElement candidateResume = null;

public XElement CandidateResume
{
get
{
if (candidateResume == null)
{
candidateResume = XElement.Parse(this.Resume);
candidateResume.Changed += (s,e) =>
{
this.Resume = candidateResume.ToString();
}
}

return candidateResume;
}

set
{
candidateResume = value;
candidateResume.Changed += (s,e) =>
{
this.Resume = candidateResume.ToString();
}
this.Resume = value.ToString();
}
}
}

वांछित XML की छाया संपत्ति बनानाइस तरह का काम करना चाहिए, लेकिन मूल स्ट्रिंग संपत्ति (रिज्यूमे) और नई छाया संपत्ति (कैंडिडेटसुइम) के प्रत्येक परिवर्तन पर स्ट्रिंग और एक्सएमएल के बीच रूपांतरण बहुत महंगा है।

अगर किसी के पास कोई बेहतर विचार है, तो मैं अभी भी सुझाव के लिए खुला हूं।


जवाब के लिए 0 № 2

मुझे इस तथ्य का सामना करने का एक तरीका मिला कि एंटिटीछिपी हुई कॉम्प्लेक्स-प्रकार का उपयोग करके फ्रेमवर्क XML- प्रॉपर्टी को स्ट्रिंग-प्रॉपर्टी में मैप करता है। यद्यपि इसके लिए आपको डेटाबेस में बचत करने से पहले प्रत्येक प्रभावित इकाई को संशोधित करना होगा। मोटे तौर पर मैं इस तथ्य का उपयोग करता हूं कि एंटिटी फ्रेमवर्क आपको अपनी .csdl फ़ाइल में आंतरिक प्रकारों को निर्दिष्ट करने की अनुमति देता है।

मैं यहाँ अपने दृष्टिकोण का थोड़ा विस्तार से वर्णन करता हूँ: .net ORM तुलना

मैं भी सिर्फ एक बार देखने के लिए CTP5 स्थापित कियाकोड-पहला दृष्टिकोण, यह देखने के लिए कि क्या एक ही दृष्टिकोण का उपयोग एक .edmx या .csdl फ़ाइल के बिना किया जा सकता है। मैं इस जवाब को संपादित करूँगा अगर मुझे एक और तरीका मिल गया।