मेटाडेटा अपवाद: निर्दिष्ट मेटाडेटा संसाधन को लोड करने में असमर्थ


681

अचानक मैं MetadataExceptionअपने उत्पन्न ObjectContextवर्ग को तात्कालिक बनाने पर लगा रहता हूँ । App.Config में कनेक्शन स्ट्रिंग सही लगता है - पिछले काम के बाद से यह नहीं बदला है - और मैंने बिना किसी बदलाव के अंतर्निहित डेटाबेस से एक नया मॉडल (edmx-file) प्राप्त करने की कोशिश की है।

क्या किसी के भी पास कोई सुझाव है?

अधिक विवरण: मैंने कोई गुण नहीं बदले हैं, मैंने किसी आउटपुट असेंबली का नाम नहीं बदला है, मैंने विधानसभा में ईडीएमएक्स को एम्बेड करने की कोशिश नहीं की है। मैंने काम छोड़ने से केवल 10 घंटे इंतजार किया है जब तक मैं वापस नहीं मिला। और फिर यह अब काम नहीं कर रहा था।

मैंने EDMX को फिर से बनाने की कोशिश की है। मैंने प्रोजेक्ट को फिर से बनाने की कोशिश की है। मैं भी खरोंच से डेटाबेस को पुनः बनाने की कोशिश की है। भाग्य नहीं, चाहे जो भी हो।


14
यदि किसी विशिष्ट उत्पाद के बारे में SO से 200k से अधिक विचार किए जाते हैं, तो वह उत्पाद कार्य नहीं कर रहा है जिस तरह से उपयोगकर्ता अपेक्षा कर रहे हैं। मैं इसे Microsoft पता देखना चाहूंगा। यदि आपके पास समय हो तो उन्हें सुझाव देने के लिए यहां एक लिंक दिया गया है: visualstudio.uservoice.com/forums/121579-visual-studio
टोनी एल

मेरी समस्या हल हो गई, db- लेयर प्रोजेक्ट से कॉपी किए गए कनेक्शन-स्ट्रिंग को बदलकर।
हार्दिक

जवाबों:


856

इसका मतलब है कि एप्लिकेशन EDMX को लोड करने में असमर्थ है। कई चीजें हैं जो इसका कारण बन सकती हैं।

  • आपने आउटपुट में कॉपी करने के लिए मॉडल की मेटाडेटाआर्टवर्कप्रोसेसिंग संपत्ति को बदल दिया होगा।
  • कनेक्शन स्ट्रिंग गलत हो सकती है। मुझे पता है कि आप कहते हैं कि आपने इसे नहीं बदला है, लेकिन यदि आपने अन्य चीजों को बदल दिया है (जैसे, एक विधानसभा का नाम), यह अभी भी गलत हो सकता है।
  • आप असेंबली में ईडीएमएक्स को एम्बेड करने के लिए पोस्ट-कंपाइल टास्क का उपयोग कर रहे होंगे, जो अब किसी कारण से काम नहीं कर रहा है।

संक्षेप में, आपके प्रश्न में सटीक उत्तर देने के लिए वास्तव में पर्याप्त विवरण नहीं है, लेकिन उम्मीद है कि ये विचार आपको सही रास्ते पर लाने चाहिए।

अद्यतन: मैंने समस्या निवारण के लिए और अधिक चरणों के साथ एक ब्लॉग पोस्ट लिखा है


70
पिछली बार सामग्री-तुलना उपयोगिता के साथ तुलना करने के मेरे प्रयासों के बावजूद, कनेक्शनस्ट्रिंग गलत था
जे स्टीन

16
यह मेरे लिए भी जुड़ाव था। जब आपके पास इंटीग्रेशन टेस्ट होते हैं, जो कि अपने स्वयं के App.config में कनेक्शन की आवश्यकता होती है, तो जब आप अपना edmx अपडेट करते हैं तो चीजें सिंक से बाहर जा सकती हैं।
रे

11
ठीक है, मैंने इसे "एंबेड" सेट करके तय किया; संकलन करना, फिर इसे दूसरे पर रीसेट करना। इससे मेरी समस्या हल हो गई।
शिम्मी वेइटहैंडलर

6
एक ही समस्या थी, अपने समाधान की कोशिश की, +1 देना चाहता था, मुझे एहसास हुआ कि मैंने पहले से ही ऐसा किया था। मुझे यह समस्या पहले याद भी नहीं है;)। इस बार मेरे मामले में यह edmx के साथ क्लास लाइब्रेरी में सही कनेक्शन स्ट्रिंग था और जब इसका उपयोग किया गया था तो वेब एप्लिकेशन में गलत था।
एपिसोडएक्सएक्स

9
बहुत बढ़िया गाइड। मेरे लिए, मैंने एक और कनेक्शन स्ट्रिंग की प्रतिलिपि बनाई, जो Res का उपयोग करता है: // * / Database.MyModel2 ..., जब मैं वास्तव में Res चाहता था: // * / MyModel1 ... (डेटाबेस मेरे एकीकरण टेस्ट प्रोजेक्ट के अंदर एक फ़ोल्डर है)
एमर्जिन

360

यह थोड़ा परिवर्तन इस समस्या के साथ मदद करता है।

मेरे पास 3 प्रोजेक्ट के साथ समाधान है।

connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

में बदलो

connectionString="metadata=res://*/;

11
इसने मेरे लिए इसे ठीक कर दिया, लेकिन इसका क्या मतलब है?
लांस फिशर


4
@ जोकल: नहीं, यह कई मामलों में काम नहीं करेगा, और दूसरों में धीमा होगा। यह समझने के लिए मेरे ब्लॉग पोस्ट को पढ़ें।
क्रेग स्टंटज़

6
मेरे .edmx को मॉडल फ़ोल्डर में ले जाया गया और कनेक्शन स्ट्रिंग को अपडेट करना भूल गया। महान सूचक। धन्यवाद। मुझे यह पता लगाने में घंटों लग गए होंगे।
मुरुगन

11
आपने श्रीमान ने एक गरीब Microsoft कर्मचारी को बहुत ही परेशान उपभोक्ता से बचाया है।
मफिन मैन

115

यह अपवाद आपको तब मिल सकता है जब Edmx एक प्रोजेक्ट में है और आप इसे दूसरे से उपयोग कर रहे हैं।

इसका कारण Res://*/एक यूरी है जो CURRENT असेंबली में संसाधनों की ओर इशारा करता है। यदि Edm कोड का उपयोग करने वाले कोड से भिन्न असेंबली में परिभाषित किया गया है, तो res: // * / काम पर नहीं जा रहा है क्योंकि संसाधन नहीं मिल सकता है।

'*' को निर्दिष्ट करने के बजाय, आपको इसके बजाय (सार्वजनिक कुंजी टोकन सहित) विधानसभा का पूरा नाम प्रदान करने की आवश्यकता है। उदाहरण के लिए:

res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...

कनेक्शन स्ट्रिंग्स के निर्माण का एक बेहतर तरीका EntityConnectionStringBuilder के साथ है:

public static string GetSqlCeConnectionString(string fileName)
{
    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlServerCe.3.5";
    csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName);

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

public static string GetSqlConnectionString(string serverName, string databaseName)
{
    SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();

    providerCs.DataSource = serverName;
    providerCs.InitialCatalog = databaseName;
    providerCs.IntegratedSecurity = true;

    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlClient";
    csBuilder.ProviderConnectionString = providerCs.ToString();

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

यदि आप अभी भी अपवाद का सामना करते हैं, तो रिफ्लेक्टर में असेंबली खोलें और अपनी .csdl, .ssdl और .msl फ़ाइलों के लिए फ़ाइल नाम जांचें। जब मेटाडेटा मान में निर्दिष्ट संसाधनों के नाम अलग-अलग होते हैं, तो यह काम करने वाला नहीं है।


8
कृपया विचार करें कि "YourEDMxFileName" योग्य नाम होना चाहिए जैसे "YourNamespace.YourEdmxFileName", यदि आप अपने असेंबली में नामस्थान का उपयोग करते हैं। हालाँकि, आपको अपने विधानसभा के नाम के बराबर नामस्थान का भाग निकालना होगा।
मार्सेल

5
MSDN का कहना है कि दूसरा पैराग्राफ गलत है। "जब आप वाइल्डकार्ड (*) का उपयोग करते हैं, तो एंटिटी फ्रेमवर्क को सही नाम वाले संसाधनों के लिए सभी असेंबली के माध्यम से देखना होगा।"
क्रेग स्टंट्ज़

मुझे पूरा यकीन है कि नाम स्थान प्रासंगिक नहीं है, लेकिन एम्बेडेड फ़ाइल पथ है। तो भले ही आप संबंधित edmx फ़ाइल के * .Designer.cs फ़ाइल का निरीक्षण करते हैं और ध्यान दें कि ऑटो-जनरेटेड क्लास नेमस्पेस MyCompany है ... जो भी हो, यह वह नहीं है जिसका आपको उपयोग करना चाहिए। इसके बजाय पथ असेंबली है, समाधान फ़ोल्डर (नाम) / फ़ाइल नाम। उदाहरण के लिए: "मेटाडेटा = Res: // * / EntityModels। <filename> .csdl।" + "Res: // * / EntityModels। <फ़ाइल का नाम> .ssdl |" + "Res: // * / EntityModels। <filename> .msl;"
डैनियल

1
@ डैनियल, यह ज्यादातर सही है, लेकिन ध्यान दें कि नाम स्थान और एम्बेडेड फ़ाइल पथ कभी-कभी समान होते हैं। आपको यह सुनिश्चित करने के लिए रिफ्लेक्टर (या मुफ्त विकल्प) के साथ देखना होगा।
क्रेग स्टंटज़

ऐसा लगता है कि यह केवल असेंबली नाम का उपयोग करता है, बिना संस्करण के, publickeytoken, आदि जैसे:res://MyAssembly/folder.<filename>.csdl...
इवान फेरर विला

67

मेरी भी ऐसी ही त्रुटि थी। मैंने परियोजना (लंबी कहानी) को फिर से बनाया था, और पुरानी परियोजना से सब कुछ खींच लिया। मुझे महसूस नहीं हुआ कि मेरा मॉडल पहले 'मॉडल' नामक एक निर्देशिका में था, और अब 'मॉडल' नामक एक निर्देशिका में था। एक बार मैंने अपने वेब में कनेक्शन बदल दिया। इसमें से कॉनफिग:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl 

इसके लिए:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl

सब कुछ काम किया (बदल Modelकरने के लिए Models)। ध्यान दें कि मुझे इस स्ट्रिंग में तीन स्थानों को बदलना था।


2
मैंने अपने एंटिटी फ्रेमवर्क मॉडल को मॉडल से डीएएल में स्थानांतरित कर दिया। लेकिन तब जब मैंने परीक्षण परियोजना में एक सप्ताह (एक सप्ताह बाद) में लिन्क प्रेडिक्टबिल्डर का परीक्षण करने के लिए परीक्षण लिखा। मुझे यह त्रुटि मिली। मैंने परीक्षण परियोजनाओं को सही किया। Appfconig के साथ यह मुख्य परियोजना के web.config में कैसे देखा - जैसा कि आपने तीन स्थानों पर कहा। तो आपके सरल उत्तर मुझे ट्रैक पर मिल गए।
पेट्रिक लिंडस्ट्रॉम

हाँ धन्यवाद - अपना फ़ाइल नाम जांचें। किसी तरह मेरा पुराना नाम था।
पीटरएक्स

7
क्या दोनों के बीच कोई अंतर है?!
इरविन रूइजाक्कर्स 14

2
@ErwinRooijakkers मॉडल बनाम मॉडल
मार्क

यह पता लगा कि मैंने क्रेग के ब्लॉग को पढ़ने के बाद से ऐसा ही किया है, लेकिन सीखने के लिए +1 यह याद रखना महत्वपूर्ण है कि आपके "एंटिटीज़" क्लास लाइब्रेरी में किए गए बदलाव ऑटोमैटिकली प्रोजेक्ट्स की कॉन्फिगरेशन फाइल्स में नहीं होते जो इसे रेफर करते हैं। / आहें खुशी मैं अकेला नहीं हूँ।
रफिन

26

और रिफ्लेक्टर के बिना मॉडल के नाम की जांच करने का एक त्वरित तरीका .... निर्देशिका की तलाश करें

... obj / {config output} / edmxResourcesToEmbed

और जाँच करें कि .csdl, .msl और .ssdl संसाधन फ़ाइलें हैं। यदि वे एक उप-निर्देशिका में हैं, तो उप-निर्देशिका का नाम मॉडल के नाम से पूर्व निर्धारित होना चाहिए।

उदाहरण के लिए, मेरी तीन संसाधन फाइलें उप-निर्देशिका डेटा में हैं , इसलिए मेरा कनेक्शन स्ट्रिंग होना चाहिए

मेटाडेटा = Res: // * / Data .MyModel.csdl | Res: // * / / Data .MMModel.ssdl | Res: // * / Data .MyModel.msl

(बनाम मेटाडेटा = Res: //*/MyModel.csdl | Res: //*/MyModel.ssdl | res: //*/MyModel.msl;)


यह वास्तव में मेरी समस्या थी। इस पर कई घंटे गुज़र गए। इस आसान स्पष्टीकरण के लिए बहुत बहुत धन्यवाद
फर्नांडो कार्वाल्होसा

महान जवाब, वास्तव में बताते हैं कि कैसे पता लगाएं कि आपका तार क्या है। और दिखाता है कि सबफ़ोल्डर्स के पास '' है। सीमांकक के रूप में और '\' या '/' नहीं।
cjb110

16

मुझे भी यह समस्या थी और यह इसलिए था क्योंकि मेरे web.config में कनेक्शनस्ट्रिंग ऐप के एक से कुछ भिन्न थे। असेंबली की वह जगह जहाँ मेरा EDMX स्थित है। पता नहीं क्यों यह बदल गया, लेकिन यहां दो अलग-अलग संस्करण हैं।

app.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SMCSModel.csdl|res://*/Model.SMCSModel.ssdl|res://*/Model.SMCSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

web.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SCMSModel.csdl|res://*/Model.SCMSModel.ssdl|res://*/Model.SCMSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

क्या यह बस app.config स्ट्रिंग (अंत में छोटे अंतर नोटिस - " App=EntityFramework" यह " application name=EntityFramework" चाहता था ) के बजाय web.config में कॉपी कर रहा था और समस्या हल हो गई थी। :)


1
धन्यवाद, यह वास्तव में मेरी समस्या थी। मेरे पास 1 प्रोजेक्ट था जो EF और दूसरे प्रोजेक्ट WCF के साथ DB को एक्सेस करता है। पहले प्रोजेक्ट का नाम बदलने के बाद, कनेक्शनस्ट्रीमिंग को मेरे पहले प्रोजेक्ट के App.config में बदल दिया गया है। इसलिए मुझे web.config :) में WCF प्रोजेक्ट के कनेक्शन में स्ट्रिंग को बदलना पड़ा
Volkan

MSDN प्रलेखन से docs.microsoft.com/en-us/dotnet/framework/data/adonet/… के बारे में : The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.एंटिटी फ्रेमवर्क कनेक्शन स्ट्रिंग्स उस लचीलेपन को साझा नहीं करते हैं, इसलिए आपको केवल उन खोजशब्दों का उपयोग करना चाहिए जो इसकी अपेक्षा रखते हैं।
सनकैट २२

13

यह मेरे साथ तब हुआ जब मैंने गलती से edmDeploy 'से' कोई नहीं 'के लिए edmx फ़ाइल (आईडीई में गुण के तहत प्रकट होता है) के बिल्ड एक्शन को बदल दिया। EntityDeploy वह है जो आपके लिए मेटाडेटा को पॉप्युलेट करता है: http://msdn.microsoft.com/en-us/library/cc982037.aspx देखें


यह मेरा फिक्स था - मैंने अपना edmx नाम बदलकर .old के रूप में मैंने इसे कॉपी किया था और कुछ चीजों की कोशिश कर रहा था, बाद में जब मैंने इसका नाम बदला तो बिल्ड एक्शन ने इसे किसी के लिए भी सेट नहीं किया और इस तरह यह त्रुटि मिली, इसे वापस EntityDloy पर हल कर दिया। मेरा मुद्दा :)
नैतिक ०

मैंने अपनी EDMX फ़ाइल को किसी अन्य फ़ोल्डर में स्थानांतरित कर दिया था और साथ ही साथ अद्यतन किए जाने वाले एम्बेडेड संसाधन नामों को प्राप्त करने के लिए बिल्ड एक्शन को बदलना पड़ा। धन्यवाद!
डेविड

यह मेरे लिए समाधान था; मैं .NET स्टैंडर्ड में अपग्रेड करने की प्रक्रिया में उस सेटिंग को खो चुका हूं। मेरी पवित्रता को बचाने के लिए धन्यवाद!
19

11

यह मेरे साथ तब होता है जब मैं नए .edmx डिजाइनर के निर्माण से पहले समाधान को साफ नहीं करता। तो बस नए .edmx डिजाइनर बनाने से पहले समाधान को साफ करने के लिए मत भूलना। यह मुझे इस एक के साथ बहुत अधिक मुद्दों को छोड़ने में मदद करता है। प्रदान किए गए नेविगेशन विवरणों को बंद करें आप दृश्य स्टूडियो में नए हैं।

क्लिक करें-> निर्माण-> स्वच्छ समाधान

फिर क्लिक करें-> बिल्ड-> समाधान का पुनर्निर्माण करें

उम्मीद है की यह मदद करेगा। सभी को धन्यवाद


8

मैंने इसके साथ सिर्फ 30 मिनट बिताए हैं। मैंने संस्थाओं का नाम बदल दिया है, कॉन्फ़िगरेशन फ़ाइल में प्रविष्टि का नाम बदल दिया है, लेकिन और भी बहुत कुछ है ... आपको सीएसएल के संदर्भ को भी बदलना होगा

बहुत आसान याद आती है - यदि आप नाम बदल रहे हैं, तो सुनिश्चित करें कि आपको सब कुछ मिल जाए ...।


6

मुझे भी यही समस्या थी। मैंने परावर्तक के साथ अपने संकलित डीएल में देखा और देखा कि संसाधन का नाम सही नहीं था। मैंने नाम बदला और यह अब ठीक लग रहा है।


6

मेरे मामले के लिए, यह edmx फ़ाइल के गुणों को बदलकर हल किया गया है।

  1. Edmx फ़ाइल खोलें
  2. EDMX डिजाइनर के किसी भी स्थान पर राइट क्लिक करें
  3. गुण चुनें
  4. अद्यतन संपत्ति जिसे "मेटाडेटा विरूपण साक्ष्य प्रसंस्करण" कहा जाता है "आउटपुट असेंबली में एम्बेड करें"

इससे मेरे लिए समस्या हल हो गई। समस्या यह है कि जब कंटेनर मेटा डेटा को खोजने की कोशिश करता है, तो यह उसे ढूंढ नहीं सकता है। तो बस इसे एक ही विधानसभा में बनाओ। यदि आपकी edmx फ़ाइलें किसी अन्य असेंबली में हैं, तो यह समाधान काम नहीं करेगा


+1,000,000 यह आज मेरे लिए अंतर्निहित मुद्दा था। एक उत्पाद के नाम पुनर्गठन और विधानसभाओं को मजबूत करने के दर्द।
माइक

6

मैंने इस त्रुटि पर पूरा दिन बिताया

अगर तुम साथ काम कर रहे हो n-tear architecture

या आपने प्रपत्र DataAccessLayer separate Modelsद्वारा जनरेट करने का प्रयास किया EDMXहैDomainModelLayer

शायद आपको यह त्रुटि मिलेगी

  1. सबसे पहले समस्या निवारण चरण में यकीन है कि कनेक्शन स्ट्रिंग बनाने के लिए है webconfig (UILayer)औरappconfig (DataAccessLayer) समान हैं
  2. दूसरा जो बहुत महत्वपूर्ण है connection string

    connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provid.....

    जो समस्या है

धरती पर जहाँ से मुझे Modelया जो भी मिला .csdl मेरे कनेक्शन स्ट्रिंग में वे कहाँ हैं

यहाँ मैं हमारे समाधान तस्वीर को देखो

यहाँ छवि विवरण दर्ज करें

आशा है कि आप मदद करेंगे


5

मैं इसे Visual Studio 2010, VB.net (ASP.NET) 4.0 में हल करने में सक्षम था।

इकाई मॉडल विज़ार्ड के दौरान, आप इकाई कनेक्शन स्ट्रिंग देख पाएंगे। वहां से आप अपने कनेक्शन स्ट्रिंग में कॉपी और पेस्ट कर सकते हैं।

केवल एक चीज जो मुझे याद आ रही थी वह थी "App_Code।" कनेक्शन स्ट्रिंग में।

entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"

दुर्भाग्य से, विज़ार्ड में कनेक्टिंग स्ट्रिंग app.config के लिए सही नहीं है। @leqid ने मॉडल को रास्ता तय करने का अच्छा तरीका सुझाया।
Der_Meister

5

गुग्लिंग के घंटों के बाद और सुझाए गए समाधानों में से कोई भी हल करने की कोशिश नहीं की गई। मैंने यहां कई समाधान सूचीबद्ध किए हैं। मैंने अपने लिए काम करने वाले को भी नोट किया है। (मैं EF संस्करण 6.1.1 और SQL सर्वर 2014 का उपयोग कर रहा था - लेकिन एक पुराना DB)

  1. प्रोजेक्ट का पुनर्निर्माण और फिर से प्रयास करें।
  2. बंद करें और VS खोलें - मुझे नहीं पता कि यह कैसे काम करता है
  3. सुनिश्चित करें कि यदि आपने .EDMX फ़ाइल को किसी निर्देशिका के अंदर रखा है, तो सुनिश्चित करें कि आप अपने ConnectionString में निर्देशिकाएँ शामिल करते हैं। उदाहरण के लिए खान DAL फ़ोल्डर के अंदर है। इसलिए यह इस तरह दिखता है: connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;(ये फाइलें हैं। इन्हें देखने के लिए आप ~ एक्सप्लोरर / अंडर / डाइरेक्टरी के तहत सॉल्यूशन एक्स्प्लोरर में सभी फाइलों को दिखा सकते हैं।)

... और कई और जो मैंने कोशिश की थी [जैसे: EntityFramework संस्करण को बाद के संस्करण में बदलना (इसके बारे में निश्चित नहीं)]


मेरे लिए क्या काम किया:

इस लेख से यहाँ , इसने मेरी समस्या को हल करने में मेरी मदद की। मैं बस अपना बदल ProviderManifestToken="2012"करने के लिए ProviderManifestToken="2008"edmx फ़ाइल में। यह करने के लिए:

समाधान खोजी

  1. फ़ाइल .edmx पर राइट क्लिक करें
  2. के साथ खोलें..
  3. संपादक XML
  4. 2008 के साथ प्रदाताManifestToken = "XXXX" बदलें

मुझे आशा है कि वह मदद करेंगे।


मुझे हाल ही में कोई बदलाव नहीं करने के बाद यह समस्या थी। वीएस को फिर से शुरू करने की कोशिश की, कोई फायदा नहीं हुआ, लेकिन फिर सफाई और पुनर्निर्माण द्वारा इसे ठीक किया गया। इसलिए, दूसरों के लिए, अगर आपने कोई बदलाव नहीं किया है और बाकी में से कोई भी प्रासंगिक नहीं लगता है, तो एक कोशिश करें।
ग्रेग

5

यदि आप एक अलग प्रोजेक्ट से edmx का उपयोग कर रहे हैं, तो कनेक्शन स्ट्रिंग में, बदलें ...

metadata=res://*/Data.DataModel.csdl

...सेवा...

metadata=res://*/DataModel.csdl

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

धन्यवाद, इस समाधान ने मेरे लिए काम किया। मैंने अपने .edmx फ़ाइल को एक प्रोजेक्ट में dir से दूसरे प्रोजेक्ट के रूट में स्थानांतरित कर दिया था, और मेरे समाधान के दौरान सभी कनेक्शन स्ट्रिंग्स से dir नाम को हटाने की आवश्यकता थी।
क्रिस

4

अंतिम समाधान (दो अन्य मशीनों पर डेटाबेस को फिर से बनाने के बाद, साथ ही ईडीएमएक्स और अन्य संप्रदायों) में एंटिटी फ्रेमवर्क के पहले संस्करण का उपयोग नहीं करना था। .NET 4.0 में फिर से इसका मूल्यांकन करने के लिए तत्पर हैं।

एक ही समस्या में फिर से दौड़ने और एक जवाब के लिए सभी को खोजने के बाद , मुझे आखिरकार वही मिला, जिसे वही समस्या थी। ऐसा प्रतीत होता है कि विज़ुअल स्टूडियो के विज़ार्ड द्वारा कनेक्शन स्ट्रिंग को सही तरीके से उत्पन्न नहीं किया गया था, और मेटाडेटा संसाधनों का लिंक एक महत्वपूर्ण पथ गायब था।

v1.0 बग ?: निर्दिष्ट मेटाडेटा संसाधन लोड करने में असमर्थ। लिपियों! = मॉडल

2013-01-16 को अपडेट करें : EF कोड फर्स्ट प्रैक्टिस (यहां तक ​​कि मौजूदा डेटाबेस के साथ) का उपयोग करके लगभग विशेष रूप से संक्रमित होने के बाद यह समस्या अब कोई समस्या नहीं है। मेरे लिए, यह ऑटो-जनरेट कोड और कॉन्फ़िगरेशन से अव्यवस्था को कम करने और उत्पाद पर अपना नियंत्रण बढ़ाने के लिए एक व्यवहार्य समाधान था।


4

मेरा मुद्दा और समाधान, लक्षण समान थे "निर्दिष्ट मेटाडेटा संसाधन को लोड करने में असमर्थ" लेकिन मूल कारण अलग था। मेरे पास समाधान में 2 परियोजनाएं थीं EntityModel और दूसरा समाधान। मैंने वास्तव में EntityModel में ईडीएमएक्स फ़ाइल को हटा दिया और फिर से बनाया है।

समाधान यह था कि मुझे वेब एप्लिकेशन परियोजना पर वापस जाना होगा और इस फाइल को कॉन्फ़िगरेशन फ़ाइल में जोड़ना होगा। नए मॉडल ने कुछ वस्तुओं को बदल दिया था जिन्हें "अन्य" प्रोजेक्ट की वेब.कॉन्फ़िग फ़ाइल में डुप्लिकेट किया जाना था। पुराना विन्यास अब अच्छा नहीं था।

     <add name="MyEntities"
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;
                    data source=Q\DEV15;initial catalog=whatever;
                    user id=myuserid;password=mypassword;
                    multipleactiveresultsets=True;
                    application name=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

4

कभी-कभी मुझे अपने प्रोजेक्ट में यह त्रुटि दिखाई देती है। मैं इसे हल करता हूं

1 - EDMX फ़ाइल पर राइट क्लिक करें

2 - Run Custom Toolविकल्प का चयन करें

3 - परियोजना का पुनर्निर्माण


इसने मेरे लिए काम किया लेकिन मुझे भी बाद में पुनर्निर्माण करना पड़ा
rdans

3

मेरे मामले में, यह समस्या मेरे मॉडल की edmx फ़ाइल का नाम बदलने से संबंधित थी ... csdl / ssdl / msl फ़ाइलों के लिए app.config कनेक्शन स्ट्रिंग को ठीक करने से मेरी समस्या ठीक हो गई।

यदि आप अपने csdl / ssdl / msl उत्पन्न करने के लिए EF 4.0 डिज़ाइनर का उपयोग कर रहे हैं, तो ये 3 "फाइलें" वास्तव में मॉडल की मुख्य edmx फ़ाइल में संग्रहीत की जाएंगी। इस मामले में, वकास द्वारा पोस्ट मार्क पर बहुत अधिक है। यह समझना महत्वपूर्ण है कि उनके उदाहरण में "Model_Name" को आपके मॉडल के .edmx फ़ाइल के मौजूदा नाम (.edmx के बिना) में परिवर्तित करने की आवश्यकता होगी।

इसके अलावा, यदि आपकी edmx फ़ाइल आपके प्रोजेक्ट के मूल स्तर पर नहीं है, तो आपको Model_Name को संबंधित पथ के साथ प्रस्तुत करने की आवश्यकता है, जैसे:

res://*/MyModel.WidgetModel.csdl|res://*/MyModel.WidgetModel.ssdl|res://*/MyModel.WidgetModel.msl

निर्दिष्ट करेगा csdl / ssdl / msl xml मॉडल फ़ाइल 'WidgetModel.edmx' में संग्रहीत है जिसे 'MyModel' नामक फ़ोल्डर में संग्रहीत किया गया है।


3

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

यह सही नहीं है क्योंकि यह वस्तु बनाने के लिए प्रतिबिंब का उपयोग करता है, लेकिन यह इसे करने का सबसे सामान्य तरीका है जो मुझे मिल सकता है।

आशा है कि यह किसी की मदद करता है।

public static class EntityHelper<T> where T : ObjectContext
{
    public static T CreateInstance()
    {
        // get the connection string from config file
        string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString;

        // parse the connection string
        var csBuilder = new EntityConnectionStringBuilder(connectionString);

        // replace * by the full name of the containing assembly
        csBuilder.Metadata = csBuilder.Metadata.Replace(
            "res://*/",
            string.Format("res://{0}/", typeof(T).Assembly.FullName));

        // return the object
        return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T;
    }
}

3

आप सबके लिए SelftrackingEntities उपयोगकर्ताओं के लिए, यदि आपने Microsoft वॉक-थ्रू का अनुसरण किया है और ऑब्जेक्ट संदर्भ वर्ग को wcf सेवा परियोजना (संदर्भ से लिंक करके .tt) में अलग किया है, तो यह उत्तर आपके लिए है:

इस पोस्ट में दिखाए गए उत्तरों का हिस्सा जिसमें कोड शामिल है जैसे:

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

आपके लिए काम नहीं करेगा !! कारण यह है कि YourObjectContextType.Assemblyअब एक अलग असेंबली में रहता है (wcf प्रोजेक्ट असेंबली के अंदर),

इसलिए आपको YourObjectContextType.Assembly.FullName -> से बदलना चाहिए

ClassTypeThatResidesInEdmProject.Assembly.FullName 

मज़े करो।


2

मुझे इसी त्रुटि संदेश के साथ समस्या हो रही थी। दृश्य स्टूडियो 2010 को बंद करने और फिर से खोलने से मेरा मुद्दा हल हो गया।


2

एक ही मुद्दा था क्योंकि मैंने एक विधानसभा का नाम बदल दिया था।

मुझे इसका नाम बदलकर असेंबलीटाइटल और असेंबलीप्रोडक्ट विशेषताओं में प्रोजेक्ट प्रॉपर्टीज़ / असेंबलीइन्फो.के लिए भी नाम बदलना पड़ा और एड्मक्स फ़ाइल के संदर्भ को हटाना और पुनः जोड़ना भी पड़ा।

तब यह ठीक काम किया।


2

उसी समस्या के साथ मैंने डेटाबेस से edmx को फिर से बनाया। मेरी समस्या का समाधान करता है।


2
दुर्भाग्य से जो लक्षण को संबोधित करता है और इलाज करता है, कारण नहीं।
क्लेरिस ब्यूवर

2

अपवाद नहीं है क्योंकि गैर मौजूदा मेटाडाटा को संकलक की ओर इशारा करते तो बस कॉपी app.config करने के लिए connectionstring Web.configConnectionString


1

रिक के अनुसार मेरे पास भी यही समस्या और समाधान था, सिवाय इसके कि मैं एक मौजूदा .edmx को एक नई परियोजना में आयात कर रहा था, और जबकि आधार नाम स्थान से कोई फर्क नहीं पड़ता था कि इसे एक अलग उपनिर्देशिका में आयात किया गया था, इसलिए मुझे कनेक्शन को भी अपडेट करना पड़ा। तीन उप स्थानों में Web.Config के अंदर स्ट्रिंग, अलग उपनिर्देशन नामकरण शामिल करने के लिए:


1

मुझे एक समाधान के साथ एक ही समस्या थी जिसमें एक समाधान फ़ोल्डर में परियोजनाएं थीं, जब उन्हें समाधान रूट पर ले जाया गया था (ताकि प्रोजेक्ट स्थानों के कारण Mvc3AppConverter के साथ एक संदिग्ध बग को दूर करने के लिए)।

यद्यपि सभी * परियोजना संदर्भों को आवश्यकतानुसार पुन: जोड़े जाने के बाद संकलित समाधान को वेबसाइट पर निकाल दिया गया था, तब त्रुटि डाली गई थी।

EDMX उन परियोजनाओं में से एक है जिसे स्थानांतरित ('डेटा' प्रोजेक्ट) किया गया था, लेकिन निश्चित रूप से डेटा प्रोजेक्ट के संदर्भ में कमी के कारण संकलन त्रुटि नहीं हुई, बस एक रन-टाइम त्रुटि।

बस प्राथमिक परियोजना के लापता संदर्भ को जोड़ने से इस समस्या का समाधान हो गया, कनेक्शन को संपादित करने की कोई आवश्यकता नहीं है।

मैं उम्मीद करता हूं कि इससे किसी की मदद होगी।


1

मेरे लिए, मैंने डेटा एक्सेस लेयर और यूजर इंटरफेस लेयर को अलग कर दिया था। इसलिए मेरे पास प्रत्येक परत के लिए इकाई कनेक्शन स्ट्रिंग है।

इससे पहले कि मैं इन दो अलग-अलग कनेक्शन स्ट्रिंग्स को एक ही होने के लिए संशोधित करूं, मैंने अभी भी त्रुटि के नीचे पाया।

Unable to load the specified metadata resource

इसलिए मैं उन दो परतों (डीएएल, यूआई) के लिए एक ही कनेक्शन के तार बनाता हूं, यह एकदम सही है।

मेरा समाधान यह है कि सभी कनेक्शन स्ट्रिंग को समान रूप से कोई फर्क नहीं पड़ता है जहां वे पहले से ही प्रस्तुत किए गए हैं


1

मुझे कल यह समस्या थी और मैं अपने कोड को डीबग में और SQL Profiler से आउटपुट में देख रहा था।

इस पोस्ट को पढ़ने और समझने से पहले मैं क्या नहीं समझ सकता था, यही वजह थी कि EntityFramework इस त्रुटि को फेंक रहा था क्योंकि यह DB कह रहा था। मैं SQL Profiler में सैकड़ों लाइनों के माध्यम से देख रहा था कि डेटाबेस मॉडल के साथ क्या गलत था। मुझे उस कॉल के जैसा कुछ भी नहीं मिल रहा था जिसकी मैं उम्मीद कर रहा था, और ईमानदार होने के लिए मैं निश्चित नहीं था कि मैं क्या देख रहा था।

यदि आप इस स्थिति में हैं, तो कनेक्शन स्ट्रिंग की जांच करें। मेरा अनुमान है कि EntityFramework अपना SQL बनाने से पहले यह कनेक्शन स्ट्रिंग के मेटाडेटा भाग में निर्दिष्ट मॉडल की जांच करेगा। मेरे मामले में यह गलत था। EntityFramework अभी तक इसे DB के रूप में नहीं बना रहा था।

सुनिश्चित करें कि नाम सही हैं। एक बार जब मुझे वह मिल गया, तब मैं SQL Profiler में कॉल देख रहा था, जहाँ ApplicationName 'EntityFramework' था जिसमें SQL अपेक्षित तालिकाओं को बुला रहा था।


1

एक खराब app.config या web.config फ़ाइल यह कर सकती है .. मैंने अपने UI में app.config कनेक्शन स्ट्रिंग को अपने web.config में कॉपी कर लिया था और प्रवेश करना समाप्त कर दिया था:

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