เคยไหมเวลาทำโปรเจคเกี่ยวกับ relational database แล้วเราต้องมานั้น map table ให้เป็น model class ? ถ้ามันมีแค่ 2, 3 table ฏ้พอทนได้นะแต่ถ้ามีเป็นสิบละ …
ถ้าคนที่เขียน C# ก็น่าจะพอคุ้นเคยกับ entity framework (ef)โดยเจ้า ef เนี่ยที่มันมีคำสั่งอยู่คำสั่งหนึ่ง ที่ทำให้เราไม่ต้องมานั่ง map table เป็นสิบ ๆ ด้วยมือนั้นก็คือ scaffold นั้นเอง โดย ef จะไปทำจาก map table จาก database แล้ว generate ออกมาให้มาเป็น class ยังไงแหละ !! ขอบคุณพระเจ้าเรารอดแล้วว 55555
microsoft/dotnetcore 2.2
mysql:8
1. Init Project
- dotnet new webapi
พอรันคำสั่งข้างบนเสร็จแล้วเราก็จะได้โปรเจคที่มีโครงสร้างโปรเจคตามรูปด้านล้างนี้เลย (folder .vscode นี้มาจาก editor นะ)
2. Add Package
โดยเราจะใช้ package ด้วยกัน 3 pakage ตามนี้เลย
dotnet add package Microsoft.EntityFrameworkCore --version 2.2.4
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 2.2.3
dotnet add package MySql.Data.EntityFrameworkCore --version 8.0.16
พอ add เสร็จแล้วทั้ง 3 pakage ให้เราเปิดไฟล์ที่มีนามสกุลว่า .csproj ขึ้นมาซึ้งไฟล์นี้จะบอกเราว่าตอนนี้โปรเจคเรามี pakage อะไรบ้างถ้าเทียบกับ javascript ก็คือไฟล์ packge.json นั้นเอง
3. Time To Scaffold!!
วิธีที่เราทำกันอยู่เขาเรียกว่า database first นะเพราะว่าเรา map จาก database ที่มีอยู่แล้ว แต่ถ้าเรายังไม่มี database ก็สามารถทำแบบ code first ได้เช่นกัน
ต่อมาเราก็จะสร้าง database ที่เราจะ scaffold กัน
ลองรันคำสั่ง
dotnet ef dbcontext scaffold --help
ก็จะเห็นว่าเราสามารถใช้คำสั่งอะไรได้บ้างในการ scaffold
ต่อมาเรามาลอง scaffold กันตามคำสั่งด้านบนก็จะได้
dotnet ef dbcontext scaffold “Server=localhost;User=root;Password=yourpassword;Database=mydb” MySql.Data.EntityFrameworkCore -c DBContext -o Models
“Server=localhost;User Id=root;Password=yourpassword;Database=mydb” คือ connection string ที่ใช้เชื่อมฐานข้อมูลของเรา
MySql.Data.EntityFrameworkCore คือ provider ที่เราจะใช้ในการ scaffold
-c DBContext คือ การระบุชื่อตัว class context ของเรา โดยเราไม่ต้องระบุก็ได้ ถ้าไม่ระบุมันก็จะ gen ชื่อจากชื่อ database เราตามด้วย context เช่น mydbcontext.cs ประมาณนี้
-o Models คือ การระบุว่า output ที่ได้จากการ scaffold เราจะเอาไปเก็บไว้ใน folder ไหนนั้นเอง
พอรันคำสั่งด้านบนเสร็จเราก็จะได้ folder Models พร้อมกับไฟล์ context และ model ออกมา
โดยถ้าเราเข้าไปดูที่ไฟล์ DBContext.cs ก็จะเห็นว่าที่เรา scaffold ไปเนี่ยมัน map column ใน table จาก database ของเรากับ attribute แต่ละตัวใน class Grade.cs
เสร็จแล้วง่ายมากๆ เลยใช่ไหม 5555 หวังว่าจะมีประโยชน์กับคนอ่านนะ ขอบคุณที่หลงเข้ามานะฮะ อิอิ ^^
สามารถดูเพิ่มเติมได้ที่:
- https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db
- https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core-scaffold-example.html
Enjoy coding :)