2017-08-29 6 views
5

निम्न कंसोल एप्लिकेशन (.Net कोर 2.0) में, conn को शून्य मान मिला।कॉन्फ़िगरेशन। GetConnectionString ("MyConn") शून्य मान मिला?

var services = new ServiceCollection(); 

IConfigurationRoot configuration = new ConfigurationBuilder() 
    .SetBasePath(Directory.GetCurrentDirectory()) 
    .AddXmlFile("App.config", optional: false).Build(); 

services.AddSingleton(configuration); 

var conn = configuration.GetConnectionString("MyConn"); // conn is null 

निम्नलिखित App.config है।

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
    <add name="MyConn" connectionString="....." /> 
    </connectionStrings> 
    <Settings> 
    <Name>Test</Name> 
    </Settings> 
</configuration> 
वहाँ

कुछ कोड है जो मूल्य Settings सफलतापूर्वक की Name की ("टेस्ट") मिल सकता है।

अद्यतन:

सही conn का काम करने के बाद मैं एक्सएमएल भाग के <Settings> अनुभाग प्राप्त करने के लिए निम्न कोड है और यह मूल्य "टेस्ट" मिल सकती है।

var myOptions = new MyOptions(); 
configuration.GetSection("Settings").Bind(myOptions); 
+0

का उपयोग तो वहाँ कुछ है आपके ऐप के कुछ हिस्सों जो कनेक्शन स्ट्रिंग को पुनः प्राप्त कर सकते हैं, ए डी कुछ जो नहीं कर सकता? विस्तृत करने के लिए परवाह? – Maritim

+0

मेरे पास 'config.GetSection (" सेटिंग ") प्राप्त करने के लिए अन्य कोड है ...', 'कनेक्शनस्ट्रिंग' भाग नहीं। – ca9163d9

+0

भले ही यह .NET कोर है, क्या 'app.config' नहीं होगा? क्या इसे अभी भी 'myassembly.exe.config' नामित नहीं किया जाएगा? – TyCobb

उत्तर

3

देखें, GetConnectionString सिर्फ एक extension method है कि बस निम्न कार्य करें:

public static string GetConnectionString(this IConfiguration configuration, string name) 
{ 
    return configuration?.GetSection("ConnectionStrings")?[name]; 
} 

यदि आप के लिए configuration.Providers में Data जाँच आप अन्य लोगों के अलावा निम्नलिखित कुंजियों/मूल्यों मिलेगा डिबगिंग के दौरान:

key: "connectionStrings:add:MyConn:name" | value: "MyConn" 
key: "connectionStrings:add:MyConn:connectionString" | value: "....." 

वास्तव में यही कारण है कि आप एक null मूल्य मिला है।


तो वर्तमान XML संरचना के साथ, आप बस कर सकते हैं:

var connString = configuration.GetValue<string>("connectionStrings:add:MyConn:connectionString", string.Empty); 

या

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
    <MyConn>conn_string_here</MyConn> 
    </connectionStrings> 
</configuration> 

करने के लिए अपने एक्सएमएल को संशोधित करने और

var conn = configuration.GetConnectionString("MyConn"); 
// conn value will be "conn_string_here" 
+0

मैंने XML फ़ाइल को संशोधित करने की विधि का उपयोग किया है।एकमात्र छोटी समस्या यह है कि विजुअल स्टूडियो चेतावनी देता है कि एक्सएमएल तत्व 'कनेक्शनस्ट्रिंग्स' में 'मायकॉन' का अमान्य बाल तत्व है। – ca9163d9

2

.NET कोर का कॉन्फ़िगरेशन XML फ़ाइलों से अलग .config फ़ाइलों का इलाज नहीं करता है। यही कारण है, तुम नहीं, एक add टैग होने से कनेक्शन स्ट्रिंग "पुराना तरीका", जोड़ सकते हैं के रूप में यह काफी अजीब कॉन्फ़िगरेशन कुंजियां बनाना होगा:

Configuration provider internals

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

<connectionStrings> 
    <MyConn>....</MyConn> 
</connectionStrings> 
संबंधित मुद्दे