2017-08-29 17 views
5

Trong ứng dụng bảng điều khiển sau (.Net core 2.0), conn có giá trị rỗng.configuration.GetConnectionString ("MyConn") có giá trị null?

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 

Sau đây là App.config.

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

Có một số mã có thể nhận được giá trị ("Test") của Name của Settings thành công.

Cập nhật:

Ngay sau khi sự phân công của conn, tôi có đoạn mã sau để có được <Settings> phần của phần XML và nó có thể nhận được giá trị "Test".

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

Vì vậy, có một số các phần của ứng dụng có thể truy xuất chuỗi kết nối, d một số không thể? Chăm sóc để xây dựng? – Maritim

+0

Tôi có mã khác để có được 'configuration.GetSection (" Setting ") ...', không phải là phần 'connectionString'. – ca9163d9

+0

Mặc dù đây là .NET Core, sẽ không có 'app.config'? Nó vẫn không được đặt tên là 'myassembly.exe.config'? – TyCobb

Trả lời

3

Xem, GetConnectionString chỉ là một extension method mà chỉ đơn giản làm như sau:

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

Nếu trong quá trình gỡ lỗi bạn kiểm tra Data trong configuration.Providers cho bạn sẽ tìm thấy các phím/giá trị sau số những người khác:

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

Đó là thực sự tại sao bạn có một giá trị null.


Vì vậy, với cấu trúc XML hiện tại, bạn có thể chỉ cần làm:

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

Hoặc sửa đổi XML của bạn để

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

và sử dụng

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

Tôi đã sử dụng phương pháp sửa đổi tệp XML.Vấn đề nhỏ duy nhất là Visual Studio cảnh báo rằng phần tử XML 'connectionStrings' có phần tử con không hợp lệ của' MyConn'. – ca9163d9

2

Cấu hình của .NET Core không xử lý tệp .config khác với tệp XML. Có nghĩa là, bạn không thể thêm các chuỗi kết nối "con đường cũ", bởi có một thẻ add, vì điều này sẽ tạo ra các phím cấu hình khá lạ:

Configuration provider internals

Nếu bạn muốn sử dụng file XML, cách đúng đắn về cách xác định các chuỗi kết nối sẽ là:

<connectionStrings> 
    <MyConn>....</MyConn> 
</connectionStrings> 
Các vấn đề liên quan