PlusMagi's Blog By Pitt Phunsanit Backend,C# Programming,Database C#: connection database ใน .NET Core

C#: connection database ใน .NET Core

การพัฒนาแอปพลิเคชันด้วย .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