管理連線字串

還記得先前練習 Entity Framework Core 時,為了方便講解起見,直接將資料庫的連線字串直接就寫死(Hard Codding)在程式中,如下所示:

public void ConfigureServices(IServiceCollection services)
{
    var connection = @"Server=keigen;Database=DemaeDb;Integrated Security=True;";
    services.AddDbContext<DemaeContext>(options => options.UseSqlServer(connection));    
    ........        
    ........
}

 

appsettings.json

雖然有時因為特別的因素不得不將一些設定值寫死(Hard Codding)在程式中,但是這樣做對於後續的維護非常的不方便,為什麼呢?一般來說外包案子結案時,除非有另外約定(加價購)不會將原始程式碼交給發案方,而一個商業應用程式中往往有許多與租用環境有關變數需要設定,比如說與資料庫伺服器有關的設定,發簡訊、發 Email ..... 等設定,這些環境變數都要有地方儲存。但是隨著應用程式營運期間,有時會因某種因素需要更換伺服器供應商、簡訊供應商等,這時就有需要更改環境變數了。如果環境變數是寫死在程式中,要更改就不是那麼容易了,必需要修改原始程式並重新編譯才行。(當然也有人認為寫死在程式中可以再收一次錢,利與弊就看個人判斷了)

在 ASP.NET Core 專案中,有一個可以用一般文字編輯器開啟的 appsettings.json 檔案,將環境變數寫在這裡就非常恰當了。如下所示,將連線字串改寫到設定檔中:

{
  "ConnectionStrings": {
    "DemaeDb": "Server=keigen;Database=DemaeDb;Trusted_Connection=True;"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

接著在程式中就可以使用 Configuration.GetConnectionString("DemaeDb") 方法讀出寫在設定檔中的連線字串,請留意 "DemaeDb" 此連線字串名稱(可自行命名)在程式中與設定檔中要互相對應:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    var connection = Configuration.GetConnectionString("DemaeDb");
    services.AddDbContext<DemaeContext>(options => options.UseSqlServer(connection));
    .......
    .......
    .......           

}

修改完程式後,再使用 Postman 測試,確實可行:

好吧!今天就學習到這裡,下個星期一(下個月?)再見了。