EF 4.1 अपवाद "प्रदाता एक प्रदाता नहीं लौटाता है। स्ट्रिंग स्ट्रिंग"


88

मैं MSDN पर पाए गए एक उदाहरण को दोहराने की कोशिश कर रहा हूं। मैं ASP.NET और EF 4.1 (CTP?) का उपयोग कर रहा हूं। मैंने EntityFramework पैकेज को स्थापित करने के लिए NuGet का उपयोग किया है।

मुझे यह त्रुटि मिल रही है: The provider did not return a ProviderManifestToken string... और डेटाबेस कभी नहीं बना है।

यहाँ मेरा कनेक्शन स्ट्रिंग है:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

यहाँ मेरा कोड है:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

यहाँ मेरा संदर्भ है:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

यह पूरी तरह से पैचेड SQL 2008 सिस्टम है, जिसमें VS 2010 SP1 है।


यह मॉडल में [कुंजी] जोड़ने के बाद प्रतीत होता है, इसके कार्यशील अतीत। मैं अभी भी एक और मुद्दे के साथ हूं, लेकिन इसका समाधान हो सकता है।
बगनुकर

इसके अलावा, यह हो सकता है कि मैंने अपने कनेक्शन स्ट्रिंग में "
इंटरग्रेटेड

मैं एक ही अपवाद रहा हूँ जब साथ काम कर रहा हूँSqlServerCe.Entity.dll
नैनो Taboada

2
सामान के हित में जो इस अपवाद को पैदा कर सकता है - मैं कनेक्शन स्ट्रिंग के नाम पर टाइपो से 20 मिनट बिताता हूं जिसे संदर्भ के नाम से मेल खाना है।
5

जवाबों:


184

मुझे यह त्रुटि हो रही थी और पहले के कुछ सुझावों की कोशिश की। तब मैंने इनर एक्सेप्शन की जाँच की और देखा कि मुझे उपयोगकर्ता के लिए एक सरल SQL लॉगिन विफलता मिल रही है। बस जांच करने के लिए कुछ और।


मेरे मामले में sql सर्वर पासवर्ड की समय
mklein

3
मुझे सही दिशा बताने के लिए धन्यवाद। मेरी SQL एक्सप्रेस सेवा शुरू नहीं हुई - duh!
२०

अच्छा ol आंतरिक अपवाद ... जब मैंने EF को एक नए बैकअप स्थान पर इंगित किया तो मेरा DB नाम गलत था ... मजेदार बात, मैंने इनर एक्स की जाँच की और आपकी टिप्पणी ने मुझे पीछे छोड़ दिया और इसे फिर से पढ़ना शुरू कर दिया ... यश!
एंडी डेंजर गगेंन

एकीकृत सुरक्षा का उपयोग कर रहा था, IIS AppPool के पास आवश्यक अधिकार नहीं थे।
विंसेंट वैंकलबर्ग

+1 - (मेरा होम आईपी बदल गया) त्रुटि संदेश: लॉगिन द्वारा अनुरोधित सर्वर 'SERVERNAME' को नहीं खोल सकता। IP पते वाले ग्राहक 'MY_OLD_IP' को सर्वर तक पहुंचने की अनुमति नहीं है। पहुँच सक्षम करने के लिए, SQL Azure पोर्टल का उपयोग करें या इस IP पते या पता श्रेणी के लिए फ़ायरवॉल नियम बनाने के लिए मास्टर डेटाबेस पर sp_set_firewall_rule चलाएं। इस परिवर्तन को प्रभावी होने में पाँच मिनट तक का समय लग सकता है। \ R \ n उपयोगकर्ता के लिए विफल 'MYADMACACCT'। \ R \ n इस सत्र को 'GUID' की एक ट्रेसिंग आईडी दी गई है। जब आपको सहायता की आवश्यकता हो तो ग्राहक सहायता के लिए यह अनुरेखण आईडी प्रदान करें। ""
डायलन हेस

8

यह कभी-कभी तब हो सकता है जब आप Visual Studio में गलत प्रोजेक्ट के app.config के भीतर कनेक्शन स्ट्रिंग रखें।

उदाहरण के लिए, मुझे यह समस्या ईएफ 4.1 (जारी संस्करण) परियोजना + डब्ल्यूसीएफ डेटा सेवा परियोजना में मिली और मैंने देखा कि मेरे पास डेटा सेवा परियोजना में निर्दिष्ट स्ट्रिंग नहीं है, जहां इसका उपयोग किया जा रहा था।


यह मेरा समाधान था। मुझे स्टार्टअप प्रोजेक्ट में उचित कनेक्शन स्ट्रिंग डालनी थी।
मिकजुइस

5

मुझे एक ही त्रुटि हो रही थी, और वास्तव में यह लॉगिन निर्दिष्ट सर्वर के लिए विफल था। मैंने कॉन्फ़िगर कनेक्शन स्ट्रिंग से "एकीकृत सुरक्षा" विशेषता को हटा दिया और यह काम किया।


इसने मेरे लिए काम किया। यदि कोई अन्य समाधान काम नहीं कर रहा है, तो किसी और को यह समस्या आनी चाहिए।
जस्टिन

यह त्रुटि तब हुई जब मेरी मशीन पर SQL एक्सप्रेस सेवा बंद कर दी गई थी।
जॉन एम

4

मेरे पास एक ही समस्या थी, और मैं अपने संदर्भ के उदाहरण के बाद नीचे कोड जोड़ता हूं (उदाहरण के लिए लोड द्वारा)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";

4

मेरे पास MvcMusicStore ऐप के साथ एक समान मुद्दा था। मैंने Web.config में "Instance = true" से "Instance = false" की एक लाइन बदल दी। यह कभी-कभी इस ट्वीक के बिना काम करता है लेकिन मुझे नहीं पता कि क्या अंतर होता है। इस http://msdn.microsoft.com/en-us/library/ms254504.aspx को पढ़ने से वास्तव में मदद नहीं मिली।


कमाल है ... यह मेरे लिए उचित समाधान था। मुझे कोई जानकारी नहीं है की क्यों।
कीस सी। बक्कर

2

अनुमति के कुछ निश्चित कारण से, EF डेटाबेस कनेक्शन नहीं बना सकता है। मैंने एक ही दिन में एक ही समस्या का सामना किया था। अंत में मैंने निम्नलिखित समाधान की कोशिश की थी और इसने काम किया: एक / ओपन IIS (मैं IIS 7 का उपयोग कर रहा हूं) b / ऐप्पल की उन्नत सेटिंग्स खोलें जो वेब साइट का उपयोग कर रही थी (Ex: DefaultAppPool) c / प्रक्रिया मॉडल समूह को देखें, पहचान मान बदलें "लोकल सिस्टम" के लिए

आशा है कि यह आपके साथ काम करेगा।


2

मुझे बस एक ही समस्या हो रही थी ...
जो समाधान मेरे लिए काम करता था वह था:
क्लाइंट नेटवर्क कॉन्फ़िगरेशन टूल (रन में टाइपिकॉनफ़ग) को चलाएं
और सुनिश्चित करें कि टीसीपी / आईपी सक्षम है।


2

मैंने आखिरकार इसे फटा दिया - एक छोटे से जंगली हंस का पीछा करने के बाद, यह अनुमति के कारण था।

रहस्योद्घाटन: उपयोग SQL PROFILER

(नोट: मैंने हाल ही में EF6 से EF5 में अपग्रेड किया है)

SQL Profiler का उपयोग करते हुए मैंने रिपोर्ट की गई विफलता से पहले निष्पादित किए गए अंतिम SQL को जल्दी से पाया:

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

अच्छी तरह से देखो कि - पलायन के साथ कुछ करना। यह __MigrationHistoryतालिका में दिख रहा है - जिसे मैंने महसूस भी नहीं किया था कि इसे बनाया था (मैंने पहले से ही अपने CSPROJ में माइग्रेशन मिटा दिया था) और इसे बाहर कर दिया।

तो मैं उस तालिका के लिए पंक्तियों को खींचता हूं और देखता हूं कि यह एक विशिष्ट उत्पाद संस्करण (v6) से बंधा है।

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

मैं वास्तव में EF6 (जो मैं पहली जगह में स्थापित करने का इरादा नहीं था) से EF5 (जो मचान के साथ अधिक संगत है) को डाउनग्रेड कर दिया और जब समस्या शुरू हुई।

मेरा अनुमान है कि Model (<Binary data>)स्तंभ पिछड़ा संगत नहीं है - इसलिए The provider did not return a ProviderManifest instanceत्रुटि क्योंकि यह इसे डिकोड करने में असमर्थ था।

मेरे पास खोने के लिए कुछ नहीं था और बस इस तालिका को पूरी तरह से मिटा दिया और भाग गया Update-Database -Verboseऔर फिर वापस ऊपर और चल रहा था।

यदि आप एक उन्नत वातावरण में हैं या पहले से ही उत्पादन में हैं, तो इस तालिका को मिटा देने से समाधान नहीं हो सकता है, लेकिन इस तरह से मुझे काम करने का अधिकार मिल गया।


मैं __MigrationsHistory तालिका पूरी तरह से छोड़ने और साथ rescaffolding समाप्त हो गया Add-Migrationऔर Update-Database -Verbose -Force। यहाँ एक कमांड संदर्भ है coding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver

महत्वपूर्ण बिंदु यह पूरी तरह से एक अनुमति त्रुटि नहीं है
शमौन_ वीवर

1

EF4.1 और ASP.NET MVC के साथ विज़ुअल स्टूडियो 11 बीटा का उपयोग करने में, मैंने अपने बालों को तब तक खींचा, जब तक कि मैंने नहीं पाया

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

मेरी समस्या को ठीक करने के लिए, मैं Application_Start में गया और बदल गया

Database.DefaultConnectionFactory = नया SqlConnectionFactory ("डेटा स्रोत = (localdb) \ v11.0; समेकित सुरक्षा = सत्य; MultipleActiveResultSets = True");

सेवा

Database.DefaultConnectionFactory = नया SqlConnectionFactory ( @ "डेटा स्रोत = (localdb) \ v11.0; एकीकृत सुरक्षा = सत्य; MultipleActiveResultSets = True");


Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");मेरे Mainमेहोद में जोड़ा गया था , अब यह एक आकर्षण की तरह काम करता है! आपका बहुत बहुत धन्यवाद।
रोटर्स

1

यह त्रुटि केवल तब मौजूद होती है जब .edmx फ़ाइल खुली होती है और जैसे ही फ़ाइल फिर से बंद होती है, गायब हो जाती है।

कोडप्लेक्स का यह उद्धरण , इसने मेरे साथ काम किया (दृश्य स्टूडियो 2013 / एमवीसी 5)


मेरे साथ भी काम किया। Edmx फ़ाइल को बंद करने और फिर से खोलने की कोशिश की। काम किया।
रोहित

1

यदि आप EF कोड प्रथम का उपयोग कर रहे हैं, तो एक और बात यह है कि यह कभी-कभी आपके DbContext वर्ग के लिए स्वचालित रूप से समर्थन डेटाबेस नहीं बनाता है। समाधान अपने स्वयं के कनेक्शन स्ट्रिंग को जोड़ने के लिए है - आप कनेक्शन स्ट्रिंग का उपयोग कर सकते हैं जो उपयोगकर्ता / पंजीकरण डेटाबेस को संभालने के लिए मौजूद हो सकता है जो एक टेम्पलेट के रूप में सरल सदस्यता प्रदाता का समर्थन करता है। अंत में, आपको अपने द्वारा बनाए गए DbContext वर्ग के लिए एक डिफ़ॉल्ट कंस्ट्रक्टर जोड़ना होगा:

public ChaletDb():base("ChaletConnection")
    {

    }

यहां, आप अपने web.config फ़ाइल में दर्ज किए गए कनेक्शन स्ट्रिंग का नाम डेटाबेस बनाने के लिए DbContext को निर्देशित करने के लिए उपयोग किया जाता है। कभी-कभी, मुझे डेटाबेस (SQL सर्वर प्रबंधन स्टूडियो में) को मैन्युअल रूप से बनाना पड़ता है जिसने इसे काम करने के लिए प्रेरित किया।


0

मेरे पास एक समाधान में कई परियोजनाएं हैं और अलग-अलग समय में प्रत्येक परियोजना में ईएफ को जोड़ा गया है। कुछ मशीनों पर यह काम कर रहा था और कुछ पर यह उपरोक्त त्रुटि के साथ विफल हो गया। मुझे यह नोटिस करने में थोड़ा समय लगा कि मेरे प्रोजेक्ट के कुछ ऐप .config में यह था:

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

यह ठीक है अगर आप लोकलडब (नए "एसक्यूएल एक्सप्रेस" जैसे) का उपयोग करते हैं, लेकिन पूरी तरह से गलत है यदि आपके पास वह विशिष्ट सर्वर स्थापित नहीं है और एक नियमित एसक्यूएल का उपयोग करता है।

समाधान: उपरोक्त कोड निकालें।


0

ऐसा इसलिए है क्योंकि SQL सर्वर से कनेक्शन विफल हो गया है।

सुनिश्चित करें कि उपयोगकर्ता खाता जिसके तहत आप प्रक्रिया चला रहे हैं, SQL सर्वर तक पहुँच है।

यदि आपने DbContext जनक थ्रेड (जैसे निर्भरता इंजेक्शन का उपयोग कर) से उत्पन्न किया है और फिर यदि आप किसी अन्य उपयोगकर्ता को प्रतिरूपण कर रहे हैं, तो यह त्रुटि होगी। समाधान नए थ्रेड या नए प्रतिरूपण संदर्भ के अंदर DbContext उत्पन्न करने के लिए होगा।


0

मैंने अभी विजुअल स्टूडियो के सभी उदाहरणों को बंद कर दिया और मेरे समाधान को फिर से खोल दिया।

मुझे नहीं पता कि वास्तव में क्या हुआ था, लेकिन मेरे पास दो अलग-अलग स्थानीय कार्यक्षेत्रों से एक ही समाधान था (एक मेरे स्थानीय परिवर्तनों के साथ, एक अपरिवर्तित भंडार स्रोत कोड के साथ)। मैं एक पोस्ट DB, Entity फ्रेमवर्क 6, विजुअल स्टूडियो 2013 और ASP.NET MVC 5 के साथ काम करता हूं।


0

मुझे इकाई ढांचे के लिए एक त्रुटि थी, लेकिन उपरोक्त उत्तर में से किसी ने भी समाधान में फिटिंग को समाप्त नहीं किया।

मेरा EntityFramework Code First Model और DataContext मेरे WebAPI मुख्य प्रोजेक्ट से एक अलग प्रोजेक्ट में था। मेरा एंटिटी फ्रेमवर्क प्रोजेक्ट कहीं न कहीं कोडिंग की लाइन को स्टार्टअप प्रोजेक्ट के रूप में सेट किया गया था और इसलिए जब मैं एक माइग्रेशन चला रहा था तो मुझे "प्रदाता एक प्रदाता नहीं लौटा रहा था" एक स्ट्रिंग प्रदाता ... कनेक्शन मुद्दा।

पता चला है कि चूंकि कनेक्शनस्ट्रीमिंग DB से WebAPI मेन प्रोजेक्ट में Web.config फ़ाइल में स्थित है, जब मैं माइग्रेशन चला रहा था तो कनेक्शन स्ट्रिंग को पुनर्प्राप्त नहीं किया जा रहा था। WebAPI प्रोजेक्ट को मेरे startProject के रूप में सेट करके मैं सफलतापूर्वक कनेक्ट करने में सक्षम था।

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