2015-04-21 4 views
10

में कनेक्शन स्ट्रिंग नहीं ढूंढ सकता है एंटीटी फ्रेमवर्क वास्तव में Web.config से कनेक्शन स्ट्रिंग्स नहीं पढ़ रहा है।एंटिटी फ्रेमवर्क वेब.कॉन्फिग

मैं एक नई परियोजना शुरू कर दिया और एक संदर्भ बनाया: फिर

public class FooContext : DbContext 
{ 
    public FooContext() : 
     base("Foo") 
    { 
    } 

    // DbSets here 
} 

, मैं परियोजनाओं Web.config करने के लिए एक कनेक्शन स्ट्रिंग कहा:

<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <connectionStrings> 
    <add name="Foo" providerName="System.Data.SqlClient" connectionString="Data Source=Foo;Initial Catalog=Foo;Integrated Security=False;User Id=foo;Password=foo;MultipleActiveResultSets=True" /> 
    </connectionStrings> 
    <appSettings> 
     ... 

मैं माइग्रेशन सक्षम होने पर, आरंभिक माइग्रेशन उत्पन्न , और फिर डेटाबेस को अद्यतन करने का प्रयास किया। थोड़ी देर बाद, अपडेट यह कहने में विफल रहता है कि यह डेटाबेस से कनेक्ट नहीं हो सका। इसलिए मैं LINQPad में अपने प्रोजेक्ट DLL खींच लिया और निम्न भाग गया:

var context = new FooContext(); 
context.Database.Connection.ConnectionString.Dump(); 

और मैं निम्नलिखित उत्पादन प्राप्त करें:

Data Source=.\SQLEXPRESS;Initial Catalog=Foo;Integrated Security=True;MultipleActiveResultSets=True 

यह पूरी तरह से मेरी कनेक्शन स्ट्रिंग अनदेखी, LocalDB से कनेक्ट करने की कोशिश कर रहा है। तो मैंने केवल "Foo" के बजाय "name=Foo" का उपयोग करके, संदर्भ कन्स्ट्रक्टर में अधिक स्पष्ट होने का प्रयास किया।

public FooContext() : 
    base("name=Foo") 
{ 
} 

इसके लायक होने के लिए, मुझे पहले कभी ऐसा नहीं करना पड़ा। मुझे एक ही समाधान में अन्य परियोजनाएं भी मिली हैं जहां मैंने बस कनेक्शन स्ट्रिंग नाम पारित किया है और वे ठीक काम कर रहे हैं।

मैं LINQPad के लिए खत्म हो वापस कूद और कोड को फिर से चलाएँ, और अब मैं एक अपवाद प्राप्त करें:

No connection string named 'Foo' could be found in the application config file. 

मैं एक पूरा नुकसान में हूँ। मैंने इस 100 बार की तरह परियोजनाएं स्थापित की हैं और कभी भी कोई समस्या नहीं थी। चूंकि यह महत्वपूर्ण हो सकता है, मैं नवीनतम इकाई फ्रेमवर्क चला रहा हूं, 6.1.3। कोई विचार क्या संभवतः यहां जा रहा है?

+0

क्या आप सुनिश्चित हैं कि कॉन्फ़िगरेशन फ़ाइल यह देख रही है, क्या आपके पास एकाधिक कॉन्फ़िगरेशन फ़ाइलें हो सकती हैं? – pjobs

+0

नहीं। प्रोजेक्ट रूट में बस एक Web.config। –

+1

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

उत्तर

16

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

1

कृपया याद रखें कि EntityFramework कोड चलाने वाले असेंबली की कॉन्फ़िगरेशन में कनेक्शन स्ट्रिंग की खोज करता है। उदाहरण के लिए यदि आप इकाई परीक्षण धावक द्वारा परीक्षण विधियों का उपयोग करके अपने ईएफ विधियों को निष्पादित करते हैं तो ईएफ इसे आपके परीक्षण असेंबली में खोजेगा, न कि उस स्थान पर जहां ईएफ विधियां संग्रहीत की जाती हैं। मेरा मानना ​​है कि यह आपका मामला हो सकता है।

वैसे - एंटिटीफ्रेमवर्क 5 में, जब एडीएमएक्स बनाया जाता है तो यह स्वचालित रूप से डीबीकॉन्टेक्स्ट उत्पन्न करता है, यह केवल name=ConnectionString का उपयोग करता है, न केवल कनेक्शन स्ट्रिंग, इसलिए मुझे लगता है कि ठीक है।

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