निर्दिष्ट नामित कनेक्शन या तो कॉन्फ़िगरेशन में नहीं मिला है, जिसका उद्देश्य एंटिटीक्लाइंट प्रदाता के साथ उपयोग करने का इरादा नहीं है, या मान्य नहीं है


170

मेरे पास एक इकाई फ्रेमवर्क ऑब्जेक्ट है और जब मैं इसे अपनी परियोजना में जोड़ता हूं, तो अनुभाग में connectionstring जोड़ा जाता app.configहै connectionstring, लेकिन जब मैं नया बनाना चाहता हूं entitycontextऔर इसका उपयोग करता हूं connectionstring, तो यह त्रुटि दिखाई देती है


1
संबंधित: मेटाडेटा
अपवाद

4
इस कड़ी के लिए धन्यवाद, क्रेग। हालांकि, मैं इस धागे को रखने के लिए वोट करता हूं, क्योंकि शीर्षक से मुझे मेटाडेटा अपवाद त्रुटि खोजने में मदद मिली थी।
jp2code

यह मेरे साथ तब हुआ जब किसी अजीब कारण के लिए कनेक्शन स्ट्रिंग के साथ कॉन्फिगर फाइल अपडेट नहीं हुई।
पी। ब्रायन। मैके

जवाबों:


217

मुझे संदेह है कि आपका मुद्दा इस तथ्य से आ रहा है कि आपके समाधान में एक से अधिक परियोजनाएं हैं और एक जिसमें आपकी इकाई रूपरेखा सामान शामिल है जिसमें edmxफाइलें शामिल नहीं हैं समाधान की स्टार्टअप परियोजना नहीं है। इस स्थिति में भी यदि कनेक्शन स्ट्रिंग EF app.configप्रोजेक्ट में मौजूद है , तब भी CLR रनटाइम पर नहीं मिल सकता है। उदाहरण के लिए, यदि आपके समाधान में एक वेब साइट और एक ईएफ परियोजना है, तो आपको ईएफ परियोजना के कनेक्शन स्ट्रिंग app.configको अपनी वेबसाइट पर कॉपी करने की आवश्यकता है web.config। मूल रूप से, किसी भी कनेक्शन स्ट्रिंग डेटा को उस प्रोजेक्ट की कॉन्फ़िग फ़ाइल में मौजूद होना चाहिए जो .Net थ्रेड्स सीएलआर (यानी आपका स्टार्टअप) द्वारा शुरू किया गया हो। यदि यह आपका मामला नहीं है, तो बस अपना खोलेंedmxफ़ाइल, उसकी सतह पर राइट क्लिक करें, गुणों का चयन करें और कनेक्शन स्ट्रिंग की प्रतिलिपि बनाएँ और इसे अपने app.configकनेक्शन स्ट्रिंग अनुभाग में पेस्ट करें । इस तरह आप यह सुनिश्चित कर सकते हैं कि आप अपने कॉन्फिग में सही हैं।

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


1
हाय मोर्टेजा और आपके उत्तर के लिए धन्यवाद, लेकिन मैं पहले web.config में कनेक्शनस्टेक्टिन sectin की प्रतिलिपि बनाता हूं, लेकिन त्रुटि हल नहीं होती है, लेकिन जब Unitmodel.designer प्रतिस्थापित करता है (सार्वजनिक EntityContext (): base ("name = EntityContext", EntityContext ") )) यह काम किया, किसी भी आईडीए
user421413

1
@Morteza, क्या आपके पास परियोजनाओं के लिए एक समाधान है जिसमें निष्पादन विधानसभा के पास ऐप नहीं है ।config? मेरे मामले में कॉल निष्पादन योग्य एक वीबी 6 ऐप है जो COM असेंबली के माध्यम से मेरी विधानसभा (जहां इकाई ऑब्जेक्ट हैं) को कॉल करता है।
नाशपाती दवे

4
इतना सरल, फिर भी इतना निराशाजनक। VOTE तक। लंबे समय तक रहने वाले ढेर!
ग्रेनडाकोडर

3
यदि आप WCF का उपयोग कर रहे हैं, तो अपनी सेवा परियोजना में कनेक्शन स्ट्रिंग को शामिल करना याद रखें
नाथन

1
धन्यवाद मोर्तेजा, मुझे बहुत समय बचा लिया!
क्रिस

32

आपको अपने web.config में app.config में कनेक्शन स्ट्रिंग को कॉपी करने की आवश्यकता है, या आउटपुट को प्रदर्शित करने वाली परियोजना के लिए पूरी फ़ाइल की प्रतिलिपि बनाएँ। यह ढांचे का उपभोग करने के लिए शर्तों में से एक है।


1
बस अपने web.config (सामने के अंत परियोजना में पाया) में एक ही कनेक्शन स्ट्रिंग (डेटा एक्सेस परियोजना में) जोड़ें।
डेनिश

@ Musikero31 मैं EF का उपयोग करता हूं और कोड में सभी इकाई कनेक्शन स्ट्रिंग्स को परिभाषित करता हूं। मैं इसे से संबंधित एक विन्यास में कुछ भी नहीं है।
कीथ बियर्ड

जब मैंने DAL फ़ाइलों को एक नई परियोजना में कॉपी किया, तो मुझे उपरोक्त त्रुटि भी मिली। कॉन्फ़िगरेशन फ़ाइलों को करीब से देखने पर, मैंने देखा कि कनेक्शन स्ट्रिंग को ईएफ द्वारा बदल दिया गया था। मैं नई परियोजना में सही कनेक्शन स्ट्रिंग को मैन्युअल रूप से कॉपी / पेस्ट करने में सक्षम था और यह काम किया।
रवि राम

9

मैं इस समस्या में भाग गया जब मैंने अपने कस्टम डेटाबेस लॉजिक को अपने समाधान में कई परियोजनाओं द्वारा उपयोग किए जाने वाले .dll में डालने की कोशिश की।

जबकि .dll के पास सही app.config फ़ाइल थी, यह काम नहीं किया। Entity चौखटे .exe के .config में कनेक्शन की जानकारी चाहते थे। वहाँ की जानकारी की नकल करना ठीक काम किया।

मोर्टेज़ा ने कनेक्शन स्ट्रिंग को सीधे .edmx में चिपकाने का समाधान मेरे लिए काम नहीं किया, क्योंकि यह मुझे वहां मूल्य को चिपकाने नहीं देता - हालांकि यह वही है जो मैं करना चाहता था।


3
हालांकि मेरे exe की निर्देशिका में केवल एक app.config था (और यह उस निर्देशिका में एकमात्र config फ़ाइल थी) यह इसे नहीं पढ़ेगा। मुझे फ़ाइल का नाम बदलना पड़ा myExe.exe.config
मारियो

6

हाय मुझे यह समस्या थी और यह मुझे पागल बना रहा था। वैसे भी आखिरकार मुझे पता चला कि समस्या क्या थी। पहली बात आपको यह सुनिश्चित करना है कि connectionstringsअंदर app.configऔर web.configसमान हैं। फिर आपको .edmxफ़ाइल पर डबल क्लिक करना होगा ताकि आप टेबल देख सकें। एक बार यू टेबलों के पास कहीं भी क्लिक करें लेकिन टेबलों पर नहीं और गुणों पर जाएं। ड्रॉपडाउन सूची में से चुनें ConceptualEntityModelऔर Entity कंटेनर नाम की खोज करें और इसे अच्छी तरह से याद रखें।

इसके बाद edmx फाइल के डिजाइनर पर जाएं और कंस्ट्रक्टर खोलें। (डिजाइनर edmx फ़ाइल का सबफ़ोल्डर है) बिल्डरों के पास BASE पैरामीटर में दो पैरामीटर होने चाहिए

public DBEntities() : base("name=DBEntities", "DBEntities")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

यह उनमें से एक है। पहले पैरामीटर में उस प्रोजेक्ट फ़ाइल का नाम होना चाहिए जिसमें .edmxफ़ाइल अंदर है। दूसरे पैरामीटर में पहले उल्लेखित गुणों से इकाई कंटेनर का नाम होना चाहिए। सभी निर्माणकर्ताओं के साथ व्यवस्था करना न भूलें:base("", "")

कम से कम मेरी समस्या और मेरी समस्या तो जैसे हल हो गई। मुझे उम्मीद है कि आप इस तरह से हल करने के लिए यू का प्रबंधन करेंगे।


6

मेरे पास इस पर एक बदलाव था कि कोई भी कवर नहीं करता था।

मेरे पास कुछ मॉडल वाले मुख्य प्रोजेक्ट थे, और एक टेस्ट प्रोजेक्ट जिसमें यूनिट टेस्ट थे। टेस्ट प्रोजेक्ट काम कर रहा था, लेकिन फिर ओपी में उल्लिखित त्रुटि के साथ बंद हो गया। मैंने EDMX फ़ाइल का कोई भी नाम बदलने या स्थानांतरित नहीं किया था।

सलाह की बहुत सारी .config फ़ाइलों की तुलना का उल्लेख किया है, लेकिन मेरी परियोजना में कोई भी नहीं था।

अंत में, मैंने मुख्य प्रोजेक्ट से app.config फ़ाइल को अपने परीक्षण प्रोजेक्ट में कॉपी किया और फिर यह काम किया। क्या यह सही कदम है, या जब अतिरिक्त मॉडल जोड़े जाते हैं, तो मैं रख-रखाव के मुद्दे पेश करूंगा, मुझे नहीं पता, लेकिन कम से कम मेरी इकाई परीक्षण अब फिर से सही ढंग से चल रहे हैं।


जब से मैंने इसे पोस्ट किया है, मुझे एहसास हुआ कि किसी अन्य प्रोजेक्ट की ऐप.कॉन्फ़िग फ़ाइल के लिए लिंक बनाना शायद सबसे अच्छा होगा। लेकिन फिर भी, मूल दृष्टिकोण को ठीक करने के लिए अन्य दृष्टिकोण काम करेगा जब कोई भी कॉन्फ़िगर फ़ाइल नहीं है।
एस। बग्गी

4

हालांकि मोर्टेज़ा मनवी का जवाब इस समस्या को हल करता है, एक और समाधान है कि कनेक्शन को गतिशील रूप से बनाया जाए और इसे अपने ऑब्जेक्टकंटेक्स्ट के लिए कंस्ट्रक्टर में पास किया जाए:

public static string CreateConnectionString()
{
    var assemblyPath = Assembly.GetExecutingAssembly().Location;
    string assemblyLocation = Path.GetDirectoryName(assemblyPath);
    string dbPath = Path.Combine(assemblyLocation, "YourDatabase.sdf");
    var sqlBuilder = new SqlConnectionStringBuilder { DataSource = dbPath };

    var entityBuilder = new EntityConnectionStringBuilder
    {
        ProviderConnectionString = sqlBuilder.ConnectionString,
        Provider = "System.Data.SqlServerCe.3.5",
        Metadata = @"res://*/YourModel.csdl|
                 res://*/YourModel.ssdl|
                 res://*/YourModel.msl"
    };

    return entityBuilder.ToString();
}

// Snip...

var entityContext = new YourObjectContext(CreateConnectionString());

यह आपके स्टार्टअप प्रोजेक्ट के ऐप.कॉन्फ़िग के लिए कनेक्शन स्ट्रिंग जानकारी को कॉपी करने की आवश्यकता को समाप्त करता है, जो कम से कम मेरे मामले में, वांछनीय नहीं था।


4

मैं कनेक्शन स्ट्रिंग में विशेषता के रूप में प्रदाता नाम = "System.Data.EntityClient" जोड़ना भूल गया। इसके परिणामस्वरूप यह त्रुटि हुई

<add name="connectionName" connectionString="metadata=res://*/..." providerName="System.Data.EntityClient" />

के बजाय

<add name="connectionName" connectionString="metadata=res://*/..." />

2

मैंने अभी-अभी पाया कि अगर VS2010 से IIS में एक वेबसाइट बनाई जाती है तो वेबसाइट के रूट से दो स्तर पर यह त्रुटि होगी। यह निश्चित नहीं है कि ऐसा क्यों होता है, इसकी अधिक जांच करने की आवश्यकता होगी। उदाहरण के लिए, यदि आपका ऐप इस पथ पर है: /admin/advertiserयदि /adminआपके IIS साइट में वर्चुअल निर्देशिका नहीं है तो त्रुटि दिखाई देगी ।

सभी मैं एक खाली बनाई गई है किया adminडायरेक्टरी में मेरा .../intepub/wwwrootत्रुटि गायब हो गया।

आप पाएंगे कि आप तब तक डिबगिंग शुरू नहीं कर पाएंगे, जब तक कि आप ऊपर दिए गए स्टेप को नहीं करते।

हमें अतीत में हमारी टीम में यह समस्या थी, इसे याद करने में कुछ समय लगा लेकिन यह ठीक उसी तरह था जैसे हमने इसे पहले भी तय किया था।


1

मैं n'tier वास्तुकला का उपयोग कर रहा हूँ और एक ही समस्या है, लेकिन यह एक मेरी मदद करो। यह यू मदद करेगा। पहले आपके पास वही connection stringहै librariesजहां आप DB को एक्सेस कर सकते हैं app.configऔर web.config उसके बाद आप बस .edmx (Model.context.cs) फ़ाइल में एक ओवरलोडेड कंस्ट्रक्टर जोड़ते हैं, जिसमें अब आपके पास दो कंस्ट्रक्टर हैं एक डिफ़ॉल्ट है और दूसरा एक यू बस जोड़ा गया है। अतिभारित)।

        public YourEntityName(string connString)
            : base(connString)
        {
        }

1

मेरे पास एक क्लास लाइब्रेरी थी जो ईएफ के साथ काम नहीं करना चाहती थी। के बाद मैं app.config (या सिर्फ कनेक्शन अनुभाग) मेरी कक्षा पुस्तकालय से exe परियोजना को कॉपी करने के लिए कनेक्शन ठीक काम किया! संभवत: config फ़ाइल exe प्रोजेक्ट के समान फ़ोल्डर में होने की उम्मीद है और इसलिए नहीं मिली। इसलिए हमेशा अतिरिक्त सावधान रहें जब एक क्लास लाइब्रेरी प्रोजेक्ट में एक कॉन्फ़िगर फ़ाइल का उपयोग किया जाता है!


0

ठीक है ... यह समस्या एक बहुत ही सरल (गूंगा) कारण के लिए भी हो सकती है ... मैंने किसी अन्य परियोजना की एक फ़ाइल की प्रतिलिपि बनाई और EntityDataSource पर ConnectionString को बदलना भूल गया ... जैसा कि मैं परियोजना की शुरुआत में हुआ था और हुआ लॉगिन पृष्ठ में, मुझे लगा कि यह विन्यास पर कुछ था, लेकिन सिर्फ गलत कनेक्शन स्ट्रिंग नाम (और DefaultContainerName) था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.