Skip to main content

Entity Framework Core (PostgreSQL)

การใช้ EF Core ทำงานกับฐานข้อมูลให้ดำเนินการในแนวทาง Database First คือ

  1. สร้างฐานข้อมูล และตารางข้อมูล [Managing Database Schemas]
  2. ใช้คำสั่ง Scaffold ของ EF Core สร้าง DBContext และ Model เพื่อใช้เขียนโปรแกรมจัดการข้อมูล

การติดตั้ง​

การติดตั้ง EF Core เพื่อใช้งานกับฐานข้อมูล PostgreSQL จะต้องติดตั้ง Package โดยใช้ Package Manager Console ด้วยคำสั่งดังนี้

PM> Install-Package Microsoft.EntityFrameworkCore

การใช้คำสั่ง Scaffold​

  1. ติดตั้ง Nuget Packages ดังนี้
    • Npgsql.EntityFrameworkCore.PostgreSQL
    • Microsoft.EntityFrameworkCore.Tools
  2. เปิด Package Manager Console เพื่อรันคำสั่ง Scaffold
  3. รันคำสั่งดังนี้
Scaffold-DbContext -Connection name=conn Npgsql.EntityFrameworkCore.PostgreSQL -OutputDir Models -Tables –NoPluralize

Entity Context Dependency Injection​

Database Connection Pool​

การใช้งาน​

Asynchronous Method

CRUD​

Create​

Read​

Update​

###Scaffold ###Entity Context Dependency Injection ###Database Connection Pool ###Asynchronous Method

CRUD​

การบันทึกข้อมูล (CUD Operation)​

การจัดการข้อมูลโดยใช้ Context และ Entity Classes โดยการเปลี่ยนแปลงที่เกิดขึ้นกับ Entity Classes จะถูกจัดการโดย ChangeTracker เมื่อมีการทำงานกับ Entity Classes เสร็จสิ้น ต้องเรียกใช้ context.SaveChangesAsync() ทุกครั้ง เพื่อบันทึกการเปลี่ยนแปลง โดยการทำงานของ Entity State แสดงดังตารางที่ 1 ดังนี้

ตารางที่ 1 แสดงการทำงานของ Entity State

Entity stateTracked by contextExists in databaseProperty values have been modifiedAction on SaveChanges
DetachedNo---
AddedYesNo-Insert
UnchangedYesYesNo-
ModifiedYesYesYesUpdate
DeletedYesYes-Delete

การเพิ่มข้อมูล​

ใช้ Add method โดย Entity state ก่อนถูกบันทึก จะมีสถานะ Added ดังตัวอย่างต่อไปนี้

using (var context = new ProfileContext())
{
var profile = new Profile { Name = "Dev_1 name" };
await context.Profiles.AddAsync(profile); // Profiles state : Added
await context.SaveChangesAsync();
}

การแก้ไขข้อมูล​

Entity Classes เริ่มต้นดึงข้อมูลจากฐานข้อมูล มีค่า Entity state เป็น Unchanged เมื่อมีการเปลี่ยนแปลงข้อมูล ค่า Entity state เปลี่ยนเป็น Modified ดังตัวอย่างต่อไปนี้

using (var context = new ProfileContext())
{
var profile = await context.Profiles.FirstAsync(); // Profiles state : Unchanged
profile.Name = "Dev_2 name"; // Profiles state : Modified
await context.SaveChangesAsync();
}

การลบข้อมูล​

Entity Classes เริ่มต้นดึงข้อมูลจากฐานข้อมูล มีค่า Entity state เป็น Unchanged เมื่อมีการลบข้อมูลโดยใช้ Remove method ค่า Entity state เปลี่ยนเป็น Deleted ดังตัวอย่างต่อไปนี้

using (var context = new ProfileContext())
{
var profile = await context.Profiles.FirstAsync(); // Profiles state : Unchanged
context.Profiles.Remove(profile); // Profiles state : Deleted
await context.SaveChangesAsync();
}

Transaction​

กระบวนการทำงานย้อนกลับ กรณีมีกระบวนการทำงาน CUD Operation ผิดพลาดในขั้นตอนใดขั้นตอนหนึ่ง

using (var context = new ProfileContext())
{
using (var transaction = context.Database.BeginTransaction())
{
var profile = new Profile { Name = "Dev_1 name" };
await context.Profiles.AddAsync(profile);
await context.SaveChangesAsync();

await transaction.CommitAsync();
}
}

Read​