28

मैंने अपने डीएएल को LINQ से एंटीटी फ्रेमवर्क का उपयोग करने से स्विच किया। चूंकि मेरा एप्लिकेशन वर्तमान उपयोगकर्ता के आधार पर अलग-अलग डेटाबेस से जुड़ता है, इसलिए मुझे रन टाइम पर डेटाकॉन्टेक्स्ट गतिशील रूप से बनाने और उचित कनेक्शन स्ट्रिंग में पास करने की आवश्यकता होती है। हालांकि, जब मैंने प्रोग्रामिंग रूप से मेरी पुरानी कनेक्शन स्ट्रिंग का उपयोग करके एक इकाई फ्रेमवर्क कनेक्शन बनाने की कोशिश की, तो कनेक्शन विफल हो गया। इसने शिकायत की कि कनेक्शन कनेक्शन में कुंजी को "सर्वर" सटीक नहीं माना गया है।एक इकाई फ्रेमवर्क कनेक्शन को मेटाडेटा संपत्ति की आवश्यकता क्यों होती है?

मुझे पता चला कि मैं आदेश इकाई की रूपरेखा कनेक्शन काम करने के लिए प्राप्त करने के लिए यह करने के लिए की जरूरत:

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(); 
entityBuilder.Provider = "System.Data.SqlClient"; 
entityBuilder.ProviderConnectionString = clientConnectionString; 
entityBuilder.Metadata = "res://*/xxxxxxxxxx.csdl..."; 
Entities entities = new Entities(entityBuilder.ToString()); 

ऐसा क्यों है?
मेटाडेटा संपत्ति क्या है?
क्या यह एक समस्या होगी कि यह हमेशा कई अलग-अलग कनेक्शनों के लिए समान है?
यह क्या होना चाहिए?
क्या इसके आसपास कोई रास्ता है?

अग्रिम धन्यवाद!

अद्यतन 1: अद्यतन Randolpho के लिए धन्यवाद, लेकिन ...
पूरी कारण मैं इस समस्या हो रही है, कि मैं एक विन्यास फाइल में कनेक्शन तार की दुकान नहीं कर सकते हैं। कनेक्शन स्ट्रिंग को गतिशील रूप से रनटाइम पर निर्धारित किया जाता है जिसके द्वारा उपयोगकर्ता कनेक्ट हो रहा है।

यहाँ मेरी सटीक परिदृश्य है: उपयोगकर्ता एक कनेक्ट कर रहा है
हैं, तो एप्लिकेशन को उपयोगकर्ता बी कनेक्ट कर रहा है, तो डेटाबेस ए से डेटा खींचती है, एप्लिकेशन डेटाबेस बी
कनेक्शन तार एक मुख्य में जमा हो जाती से डेटा खींचती है डेटाबेस, और संख्या संभावित रूप से असीमित है। हर बार जब मैं कोई उपयोगकर्ता जोड़ता हूं, तो मैं web.config में नहीं जाना चाहता, इस तथ्य का जिक्र नहीं करना कि अंततः यह बड़ा हो जाएगा!

+0

चूंकि मैपिंग प्रत्येक कनेक्शन के लिए समान हैं, और यह नहीं बदलेगा, इससे कोई फर्क नहीं पड़ता कि मैं उन सभी के लिए एक ही मेटाडाटा का उपयोग करता हूं? –

+0

हाँ यह सही है – user230910

उत्तर

9

आप इन कड़ियों बहुत जानकारीपूर्ण मिलेगा:

http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

http://weblogs.asp.net/pgielens/archive/2006/08/21/ADO.NET-Entity-Framework-Metadata.aspx

निष्कर्ष? इकाई फ्रेमवर्क को आपकी इकाई मैपिंग बनाने के लिए मेटाडेटा की आवश्यकता होती है।

इसके अतिरिक्त, आपको कोड में इसे बनाने के बजाय अपनी कनेक्शन जानकारी को अपनी कॉन्फ़िगरेशन फ़ाइल में ले जाने पर विचार करना चाहिए। पहला लिंक आपको दिखाएगा कि यह कैसे करें।

+2

@ocdecio: केवल इसके लिए ईएफ छूट न दें; NHibernate काफी वही काम करता है। मुझे यकीन है कि अन्य कारण भी हैं। :) – Randolpho

+2

@ocdecio, मुझे एक ओआरएम मैपर देखना अच्छा लगेगा जो किसी प्रकार की मैपिंग फ़ाइल का उपयोग नहीं करता है। जब तक आप टेबल 1 के साथ 1: 1 नहीं कर लेते हैं, तो कुछ कुछ कहना है कि क्या करना है। – jfar

24

Randolpho के जवाब पर विस्तार:

मेटाडाटा संपत्ति विशेष रूप से .SSDL (भंडारण मॉडल,) का स्थान को इंगित .CSDL (वैचारिक मॉडल,) और .MSL (मानचित्रण मॉडल) फ़ाइलें। ये तीन फाइलें अनिवार्य रूप से एंटिटी डेटा मॉडल हैं। "Res: //" यूआरआई-स्टाइल क्वालीफायर इंगित करता है कि संकलित ईडीएम असेंबली में फ़ाइलों को संसाधन के रूप में एम्बेड किया गया है।

संबंधित मुद्दे