บทความชุด .NET 6 แบบจับมือทำ — #10: Infra Project & Entity Framework
Infra Project
ติดตั้ง EF Core Nuget Package สำหรับ PostgreSQL
- พิมพ์
Ctrl + Shift + P
- พิมพ์
nuget
- พิมพ์
Npgsql.EntityFrameworkCore.PostgreSQL
- เลือกติดตั้งลงไปยัง
Infra Project
Npgsql.EntityFrameworkCore.PostgreSQL แล้ว
สร้าง Entity Framework Database Context
- สร้าง Folder ชื่อ Database
- สร้าง Database Context ใน Folder โดยทำตามวิธีที่กำลังจะกล่าวถึงในขั้นตอนถัดไป หรือ ใช้วิธี Copy Code ข้างล่างนี้ก็ได้นะครับ
เผื่อใครต้องการตัวช่วยก็ Download Database Context ได้จากลิ้งนี้เลย
- ทำการสืบทอด Class DbContext ของ Entity Framework
- สร้าง Constructor ของ Database Context
- ระบุ DbSet โดยอ้างอิงจาก Domain Project เพื่อใช้ในการสร้างเป็น Database Tables
- สร้าง Folder Configurations และสร้าง Database Configuration Files สำหรับทั้ง Province และ PointOfInterest เพื่อกำหนด Schema ของ Table ว่ามี Field ไหนเป็น Primary Key, Field ไหนที่เป็น Required Fields, Field ไหนที่ห้ามมีขนาดตัวอักษรเกิน 50 ตัวอักษร
- ทำการ Copy Code ได้จากที่ลื้งข้างล่างนี้นะครับ
- กลับไป Apply Database Configuration ต่อที่ DataContext โดยทำการ Override Function OnModelCreating ดังนี้
protected override void OnModelCreating(ModelBuilder builder)
{
builder.ApplyConfiguration(new ProvinceConfiguration());
builder.ApplyConfiguration(new PointOfInterestConfiguration());
}
สร้าง Seed Data
- เพิ่ม File ใหม่ชื่อ Seed.cs และทำการ Copy Source Code ในลิ้งข้างล่างนี้
- เราจะใช้ Script ในการเพิ่มสถานที่น่าสนในใจจังหวัดขอนแก่นและจังหวัดกรุงเทพ ในการ Seed Data ลงไปยัง Database อีกทีในตอนที่เรารัน API Project นะครับ
พัฒนา Repository Pattern
หลังจากที่เรามี DataContext ในการต่อกับ Database แล้ว คราวนี้ก็จะมาถึงขั้นตอนที่เราจะนำ DataContext มาพัฒนา Repository Pattern เพื่อให้ Core Project เรียกใช้ได้ที่ Service Class นะครับ ใครเหนื่อยก็พักซักหน่อย หายเหนื่อยแล้วก็…ลุย !!!
อันดับแรกให้สร้าง Folder Database/Repositories เสร็จแล้วให้สร้าง Files ดังนี้นะครับ
_BaseRepository.cs
=> พัฒนา _IBaseRepository ด้วย DataContextProvinceRepository.cs
=> เน้นการจัดการข้อมูลที่เกี่ยวกับ Domain Model Province จาก Domain ProjectPointOfInterestRepository.cs
=> เน้นการจัดการข้อมูลที่เกี่ยวกับ Domain Model PointOfInterest จาก Domain Project
ถ้าเรามี Business Domain ใหม่ๆ เราก็สามารถเพิ่ม Repository Interface เข้ามาอีกได้นะครับ
ให้ทำการ Copy Code จากลิ้งข้างล่างนี้นะครับ
พัฒนา Email Provider
หลังจากที่เราได้กำหนด Email Provider Interface ใน Core Project แล้ว ในขั้นตอนนี้เราจะทำการพัฒนา Email Provider ให้สามารถใช้งานได้ดังนี้นะครับ
เริ่มต้มด้วยการสร้าง Folder ชื่อ Email เสร็จแล้วให้เราทำการสร้าง Files ดังนี้ และ Copy Code จากลิ้งข้างล่างนะครับ
MailGunEmailProvider.cs
=> พัฒนาการส่งเมล์โดยการสมมติว่ากำลังต่อกับ Email Provider ชื่อ MailGunMailGunEmailProviderOptions.cs
=> เป็น Option Pattern สำหรับMailGunEmailProvider.cs
เพื่อเป็น Configuration ในการติดต่อกับ MailGunSendgridEmailProvider.cs
=> พัฒนาการส่งเมล์โดยการสมมติว่ากำลังต่อกับ Email Provider ชื่อ SendgridSendgridEmailProviderOptions.cs
=> เป็น Option Pattern สำหรับSendgridEmailProvider.cs
เพื่อเป็น Configuration ในการติดต่อกับ Sendgrid
ลุยกันครับบบบ
- #0: เกริ่นนำ
- #1: ติดตั้งโปรแกรม
- #2: รวม Cheat Sheet
- #3: Empty Solution in GitHub
- #4: พัฒนาโครงสร้างของ Source Code
- #5: VS Code Debugging
- #6: Configuration
- #7: Dependency Injection & Service Lifetime
- #8: Domain Project
- #9: Core Project
- #10: Infra Project
- #11: API Project
- #12: Unit Testing
- #13: Logging and Monitoring
- #14:เพิ่มความปลอดภัยด้วย OAuth2 & OpenID Connect
- #15: Background Process & Scheduler
- #16: Health Checks
- #17: The Twelve-Factor App
- #18: Deployment — Docker
- #19: Deployment — Azure App Service
- #20: Deployment — Azure Container Apps