第21天,已經過了三個禮拜,身心俱疲...就算是待業中一次開四個主題實在是太累了
今天講一下怎麼更改資料庫連線位置的設定,之前我們是用dotnet ef cli工具進行反向工程幫我們產生資料庫模型,在打參數時輸入的連線字串預設會寫死在[資料庫名稱]Context裡面,我這裡的資料庫名稱是AspCoreIThelp2020,所以會產生AspCoreIThelp2020Context.cs檔,並且把連線字串寫死在裡面。
這個檔案預設會使用DI建構式注入從StartUp.cs載入設定options,若options沒有指定資料庫連線字串的話,AspCoreIThelp2020Context中的第20行OnConfiguring()方法會使用當初我們打指令寫死的連線字串。(你還看到這裡有warning提示訊息)
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=AspCoreIThelp2020;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");
}
}
所以前往Startup.cs檔,幫我們AspCoreIThelp2020Context指定資料庫連線字串。在ConfigureServices()方法中我們有使用services.AddDbContext<AspCoreIThelp2020Context>()
的方式向DI註冊我們要使用AspCoreIThelp2020Context,其括號()裡面就可以寫一些設定值幫我們傳給AspCoreIThelp2020Context
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<AspCoreIThelp2020Context>();
}
寫法如下,Configuration.GetConnectionString()會找appsettings.json裡面叫做ConnectionString的內容,我在裡面取了一個DBConStr名稱代表連線字串的變數
services.AddDbContext<AspCoreIThelp2020Context>( options => options.UseSqlServer(Configuration.GetConnectionString("DBConStr"))
});
{
"ConnectionStrings": {
"DBConStr": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=AspCoreIThelp2020;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
},
...其他設定值...
}
完成以上步驟後,我們的EFcore就會使用appsettings裡面的資料庫連線字串來連接資料庫