ข้ามไปที่เนื้อหา

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 state Tracked by context Exists in database Property values have been modified Action on SaveChanges
Detached No - - -
Added Yes No - Insert
Unchanged Yes Yes No -
Modified Yes Yes Yes Update
Deleted Yes Yes - 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