การพัฒนาแอปพลิเคชันด้วย .NET Core มักจะต้องมีการเชื่อมต่อกับระบบฐานข้อมูลภายนอกเพื่อจัดเก็บและเรียกใช้ข้อมูลอย่างถาวร ในบทความนี้เราจะเจาะลึกวิธีการเชื่อมต่อ C# เข้ากับฐานข้อมูล PostgreSQL ที่ทรงพลัง โดยใช้เครื่องมือหลักคือ Entity Framework Core (EF Core) และ Npgsql ซึ่งเป็น Provider ที่รองรับ PostgreSQL โดยเฉพาะ
⚙️ ขั้นตอนที่ 1: การตั้งค่า Connection String สำหรับ PostgreSQL
ก่อนอื่น เราต้องกำหนด Connection String ซึ่งเป็นกุญแจสำคัญในการระบุตำแหน่งและรายละเอียดการเข้าถึงฐานข้อมูล PostgreSQL Connection String จะถูกเก็บไว้ในไฟล์ appsettings.json เพื่อให้โค้ดของเรามีความยืดหยุ่นและไม่ Hardcode ข้อมูลสำคัญ
คุณสามารถเพิ่มส่วน ConnectionStrings เข้าไปในไฟล์ appsettings.json ดังตัวอย่างต่อไปนี้:
JSON
{
"ConnectionStrings": {
"PostgreSqlDbContext": "Host=localhost;Port=5432;Database=mydatabase;Username=myuser;Password=mypassword"
}
}
คำอธิบาย: รูปแบบ Connection String ของ PostgreSQL จะระบุรายละเอียดต่างๆ เช่น Host (เซิร์ฟเวอร์), Port (พอร์ต), Database (ชื่อฐานข้อมูล), Username และ Password
🚀 ขั้นตอนที่ 2: การตั้งค่า Dependency Injection ใน Program.cs
ในไฟล์ Program.cs เราจะดึง Connection String ที่ได้มา และลงทะเบียน (Register) DbContext ให้พร้อมใช้งานผ่าน Dependency Injection (DI) โดยใช้ UseNpgsql() ซึ่งเป็นเมธอดเฉพาะสำหรับ PostgreSQL
C#
// 1. ดึง Connection String จาก Configuration
var connectionString = builder.Configuration.GetConnectionString("PostgreSqlDbContext");
// 2. ลงทะเบียน DbContext โดยใช้ UseNpgsql สำหรับ PostgreSQL
builder.Services.AddDbContext<MyDbContext>(options => options.UseNpgsql(connectionString));
การดำเนินการนี้ทำให้แอปพลิเคชันของเราทราบว่าควรใช้ PostgreSQL ในการจัดการฐานข้อมูล
🏛️ ขั้นตอนที่ 3: การสร้าง DbContext และ Model Entity
DbContext ทำหน้าที่เป็นตัวกลางในการสื่อสารระหว่างแอปพลิเคชัน C# กับฐานข้อมูล ส่วน Model คือคลาส C# ที่ทำหน้าที่เป็นตัวแทน (Representation) ของตารางในฐานข้อมูล
1. MyDbContext.cs
เราจะกำหนดคลาส DbContext และประกาศ DbSet สำหรับแต่ละตารางที่เราต้องการใช้งาน:
C#
using Microsoft.EntityFrameworkCore;
namespace MyApp.Data;
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) {
}
// DbSet แทนตาราง 'user_logins' ใน PostgreSQL
public virtual DbSet<UserLogin> UserLogins { get; set; }
// DbSet แทนตาราง 'product' ใน PostgreSQL
public virtual DbSet<Product> Products { get; set; }
}
2. UserLogin.cs (Model Entity)
นี่คือตัวอย่าง Model ที่แมปกับตาราง user_logins ใน PostgreSQL:
C#
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;namespace MyApp.Models;
public class UserLogin
{
[Key]
[Column("client_id", TypeName = "VARCHAR(50)")]
public string ClientId { get; set; } // Primary Key
[Required]
[Column("client_secret", TypeName = "VARCHAR(50)")]
public string ClientSecret { get; set; }
public DateTime LoginDate { get; set; }
}
✅ บทสรุป: การเชื่อมต่อที่สมบูรณ์แบบ
ด้วยการใช้ Npgsql ในการเชื่อมต่อ PostgreSQL เข้ากับ .NET Core EF Core ทำให้เราสามารถจัดการวงจรชีวิตของข้อมูล (CRUD Operations) ได้อย่างมีประสิทธิภาพและปลอดภัย การแยกส่วนประกอบอย่างชัดเจนระหว่าง Connection String, DbContext, และ Model ทำให้โค้ดของเรามีความสะอาด (Clean Code) และง่ายต่อการบำรุงรักษาในระดับ Senior Architect