web.config中的ASP.NET 5 / EF7連接字符串?

asp.net-core entity-framework-core

在ASP.Net 4.5中,我可以將我的連接字符串放在web.config中,以便利用web.config transformations這樣我就可以在本地使用開發數據庫,然後在發布它時會指向生產數據庫。我現在正在使用ASP.Net 5和EF 7,它似乎使用config.json文件來存儲連接字符串而不是web.config 。使用這種存儲文件的新方法,我無法弄清楚如何執行過去的web.config transformations 。如何設置config.json來執行此操作或配置它以便我可以在web.config中執行此操作並讓EF查找字符串?

一般承認的答案

web.config轉換語法面向XML格式的數據。新配置包含一些JSON格式的文件,一個可以非常容易地實現分段方案。

首先,ASP.NET支持允許通過使用ASPNET_ENV環境變量或通過在launchSettings.json文件中設置Hosting:Environment來設置目標環境(請參閱項目的Properties文件夾)。可以在Visual Studio中的項目屬性中修改文件launchSettings.json 。首先應該選擇“個人資料”

在此處輸入圖像描述

並為每個配置文件進行設置。或者,可以手動編輯Properties\launchSettings.json文件。

某些配置文件(如hosting.json使用暫存自動運行。因此,你可以例如不同的端口和不同的接口通過指定裝訂設置server.urlshosting.jsonhosting.Development.json例如。

要在appsettings.json包含登台邏輯,需要在Startup.cs修改Startup類的構造函數。例如:

public class Startup
{
    public static IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc()
            .AddJsonOptions(options => {
                options.SerializerSettings.ContractResolver =
                    new CamelCasePropertyNamesContractResolver();
            });
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<MyContext>(options => {
                options.UseSqlServer(Configuration["Data:ConnectionString"]);
            })
            .AddDbContext<SM9Context>(options => {
                options.UseSqlServer(Configuration["Data:SM9ConnectionString"]);
            });
    }
}

上面的代碼在Configuration屬性中保存配置,然後使用ConfigureServices注入MyContextSM9Context數據庫上下文。例如,可以使用所有高效配置創建主appsettings.json文件,並創建appsettings.Development.json文件,該文件僅覆蓋一個 (來自兩個Data:ConnectionStringData:SM9ConnectionString )連接字符串:

public class Startup
{
    public static IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc()
            .AddJsonOptions(options => {
                options.SerializerSettings.ContractResolver =
                    new CamelCasePropertyNamesContractResolver();
            });
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<MyContext>(options => {
                options.UseSqlServer(Configuration["Data:ConnectionString"]);
            })
            .AddDbContext<SM9Context>(options => {
                options.UseSqlServer(Configuration["Data:SM9ConnectionString"]);
            });
    }
}

ASP.NET將結合文件appsettings.json和可選的appsettings.Development.json來創建完整的配置參數集。

本文和文檔的一部分描述瞭如何在ASP.NET 5中使用分段。


熱門答案

你可以做這樣的事情來從不同的* .json文件中獲取配置,以下是基於環境或環境變量;

var builder = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
    .AddEnvironmentVariables();

您也可以使用ASPNET秘密管理器。

每次訪問配置時,它都會覆蓋它具有的任何配置值的設置,這意味著該變量將反映它設置為最後的任何配置。

查看有關配置文檔




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因