本篇建立在完成使用 Visual Studio Code 將模型新增至 ASP.NET Core 中的 Razor 頁面應用程式教學之後,已建立 Sqlite 作為資料庫,並完成本篇教學,預計將資料庫轉為 MySQL。
先將 MySQL NuGet 套件安裝到目前專案中,可參考 Database Providers1
dotnet add package MySql.Data.EntityFrameworkCore
於 appsettings.json
中,將 MovieContext
資料取代為連線設定:1
2
3
4
5
6
7
8
9
10
11
12{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionStrings": {
// "MovieContext": "Data Source=MvcMovie.db",
"MovieContext": "server=192.168.99.100;database=mydatabase;user=myuser;password=mypassword"
}
}
於 Startup.cs
中,將 options.UseSqlite(Configuration.GetConnectionString("MovieContext"))
取代為 UseMySQL
:1
2services.AddDbContext<MovieContext>(options =>
options.UseMySQL(Configuration.GetConnectionString("MovieContext")));
接著於 CLI 中執行指令(若還沒 migrate 過,請先執行 dotnet ef migrations add InitialCreate
):1
dotnet ef database update
應會遇到 Table 'mydatabase.__EFMigrationsHistory' doesn't exist
的錯誤訊息,此為已知問題,可藉由新增這張資料表來解決此問題:1
2
3
4
5
6CREATE TABLE `__EFMigrationsHistory`
(
`MigrationId` nvarchar(150) NOT NULL,
`ProductVersion` nvarchar(32) NOT NULL,
PRIMARY KEY (`MigrationId`)
);
新增後再重新執行 dotnet ef database update
,成功後此時於資料庫中應可看到 Movie
資料表,此時即大功告成。
後記:若選擇 Pomelo.EntityFrameworkCore.MySql
應該就不會有資料表不存在的問題,而 ConnectionStrings 應改為以下格式:Server=localhost;database=mydatabase;uid=myuser;pwd=mypassword;
。
參考資料: