บทความนี้เป็นบทความต่อเนื่องจาก [10 ขั้นตอน] สร้าง Web Application เชื่อมกับ SQLite DB ด้วย ASP.NET Core MVC แบบ Model First โดยใช้ Visual Studio for Mac และ [10 ขั้นตอน] สร้าง Web Application เชื่อมกับ SQL Server Database ด้วย ASP.NET Core MVC แบบ Model First
เราจะสมมติสถานการณ์ว่า เราได้ทำ Web Application ของเราเสร็จเรียบร้อยแล้ว และเราก็ต้องการเอา Web Application ที่เราสร้างขึ้นมานี้ ไปติดตั้งบน Server เพื่อใช้งานจริงในแบบ Production ซึ่งในความเป็นจริง คงไม่มีใครใช้ SQLite เป็น Database สำหรับจัดเก็บข้อมูล และ Microsoft เอง ก็แนะนำให้ใช้เฉพาะในขั้นตอนการ Development เท่านั้น ดังนั้น เราจึงจำเป็นต้องมาปรับปรุง Web Application ก่อนการนำขึ้นเป็น Production ต่อไป ซึ่งแนวทางที่ Microsoft แนะนำคือ ให้สร้าง Environment สำหรับ Development กับ Production ไว้ และเรียกใช้ผ่าน Configuration แต่ในบทความนี้ จะเป็นการเปลี่ยนในระดับ Configuration เลย ไม่ใช้ Environment Variable นะครับ
เพื่อให้สั้นกระชับ ในบทความนี้จะใช้โปรเจคเดิมที่ได้สร้างไว้จากบทความ [10 ขั้นตอน] สร้าง Web Application เชื่อมกับ SQLite DB ด้วย ASP.NET Core MVC แบบ Model First โดยใช้ Visual Studio for Mac โดยจะนำโปรเจคนี้มาปรับปรุงโค้ดเฉพาะบางส่วนที่เกี่ยวข้องเท่านั้น
เริ่มกันที่ Startup.cs แก้ไขจากเดิม
options.UseSqlite
เป็น
options.UseSqlServer
ต่อไปเป็นไฟล์ appsettings.json แก้ไข Connection String จาก
"MvcMovieContext": "Data Source=MvcMovie.db"
เป็น
"ConnectionStrings": {
"MvcMovieContext": "Data Source=[IPADDRESS];Initial Catalog=[DBNAME];Persist Security Info=True;User ID=[USERNAME];Password=[PASSWORD];Max Pool Size=20000;"
}
จากนั้น เมื่อเราเปลี่ยน Database Connection ก็หมายความว่า Database ปลายทางยังไม่ถูก Migration จาก Database Context ในโปรเจคของเรา จึงยังไม่มี Database และ Table ตามที่กำหนดไว้ ดังนั้น ขั้นตอนต่อไปเราต้องทำการ Migration ก่อน โดยขั้นตอนการ Migration จะทำเหมือนกันกับบทความ [10 ขั้นตอน] สร้าง Web Application เชื่อมกับ SQLite DB ด้วย ASP.NET Core MVC แบบ Model First โดยใช้ Visual Studio for Mac : 8. ทำการ Migration เพื่อสร้าง Database และ Table ตาม Model ที่กำหนด เลย แต่เนื่องจากเรามี Migration เดิมที่เป็น SQLite Database อยู่แล้ว เราจึงจำเป็นต้องลบ Migration เดิม ออกไปก่อน เพราะเป็น Migration เริ่มต้น ซึ่งขึ้นอยู่กับตัว Database ด้วย โดยใช้คำสั่ง
dotnet ef migrations remove
dotnet ef migrations remove เป็นคำสั่งสำหรับลบ Migration ตัวล่าสุดทิ้งไป
เราจำเป็นต้องสร้าง Migration ใหม่ แม้เราจะมี Migration เดิมอยู่แล้ว เนื่องจาก Migration เดิมใช้ SQLite Database แต่เราต้องการเปลี่ยนไปใช้ SQL Server Database ซึ่งมีความแตกต่างกันใน Code ของการ Migration (Database Annotation) นั่นเอง
จากนั้น ทำการ Migration โดยใช้ .NET Core CLI ตามคำสั่งดังนี้
dotnet ef migrations add InitialCreateSqlServerDB
dotnet ef database update
เมื่อรันคำสั่งสำหรับ Migration ครบแล้ว จะเห็นว่า Database ก็จะมีโครงสร้างตามโมเดลที่กำหนดไว้
และเมื่อลงรันโปรเจคดู ก็จะพบว่า Web Application ของเรายังใช้งานได้ตามปกติ และได้เชื่อมกับ Database Sql Server แล้ว
เมื่อทำได้เช่นนี้ เราก็สามารถใช้ Visual Studio 2019 for Mac บน MocOS ของเราทำงานร่วมกับ SQL Server Database ได้แล้ว