.NET 8 Framework C# (C-Sharp) Entity Framework Core

web API with ASP.NET Core

ตัวอย่างจะมีการออกแบบฐานข้อมูลและเขียนโปรแกรม API สำหรับการจัดการข้อมูลลูกค้า โดยใช้ .NET 8 Framework, C# (C-Sharp)

web API with ASP.NET Core
Ake SuwaphanAke Suwaphan
14 February 2024

web API with ASP.NET Core

APIs เป็นเครื่องมือที่มีประสิทธิภาพสำหรับนักพัฒนาซอฟต์แวร์ ช่วยให้นักพัฒนาซอฟต์แวร์สามารถสร้างแอปพลิเคชั่นใหม่ๆ ได้โดยไม่ต้องเขียนโปรแกรมทั้งหมดเอง ช่วยให้เชื่อมต่อระบบต่างๆ เข้าด้วยกัน ช่วยให้เข้าถึงข้อมูลจากแหล่งต่างๆ ได้ง่ายขึ้น และช่วยเพิ่มประสิทธิภาพการทำงาน

RESTful APIs เป็นประเภทที่นิยมใช้มากที่สุด ทำงานบนพื้นฐานของ HTTP methods (GET, POST, PUT, DELETE) ตัวอย่างจะมีการออกแบบฐานข้อมูลและเขียนโปรแกรม API สำหรับการจัดการข้อมูลลูกค้า โดยใช้ .NET 8 Framework, C# (C-Sharp)

1. ออกแบบฐานข้อมูล สร้างตาราง "Customers" ที่มีคอลัมน์ต่อไปนี้

Id (int, Primary Key), FirstName (nvarchar), LastName (nvarchar), Email (nvarchar), Phone (nvarchar), Address (nvarchar)


    CREATE TABLE Customers (
        Id INT PRIMARY KEY,
        FirstName NVARCHAR(255),
        LastName NVARCHAR(255),
        Email NVARCHAR(255),
        Phone NVARCHAR(255),
        Address NVARCHAR(255)
    );

2. เพิ่ม Model สำหรับลูกค้า (Models/Customer.cs)

    public class Customer
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Phone { get; set; }
        public string Address { get; set; }
    }

3. เพิ่ม DbContext เพื่อเข้าถึงฐานข้อมูล (Data/AppDbContext.cs)

    using Microsoft.EntityFrameworkCore;

    public class AppDbContext : DbContext
    {
        public DbSet<Customer> Customers { get; set; }

        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
        {
        }
    }

4. เพิ่ม ConnectionStrings สำหรับฐานข้อมูล SQL Server ใน appsettings.json และกำหนดค่า DbContext ใน Program.cs

    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=YourServer\\mssqllocaldb;Database=YourDatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"
      },
    }


    using Microsoft.EntityFrameworkCore;

    // Add services to the container.
    builder.Services.AddDbContext<AppDbContext>(
            options => options.UseSqlServer("name=ConnectionStrings:DefaultConnection"));

5.เพิ่ม Controller สำหรับ API ในการจัดการข้อมูลลูกค้า (Controllers/CustomerController.cs)

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    using System.Collections.Generic;
    using System.Threading.Tasks;

    [ApiController]
    [Route("api/[controller]")]
    public class CustomerController : ControllerBase
    {
        private readonly AppDbContext _context;
        public CustomerController(AppDbContext context)
        {
            _context = context;
        }
        .
        .
        .
        .
        .
        private bool CustomerExists(int id)
        {
            return _context.Customers.Any(e => e.CustomerId == id);
        }
    }

6. GET ใช้สำหรับดึงข้อมูลจาก Server

    [HttpGet]
    public async Task<ActionResult<IEnumerable<Customer>>> GetCustomers()
    {
        return await _context.Customers.ToListAsync();
    }

    [HttpGet("{id}")]
    public async Task<ActionResult<Customer>> GetCustomer(int id)
    {
        var customer = await _context.Customers.FindAsync(id);

        if (customer == null)
        {
            return NotFound();
        }

        return customer;
    }

7. POST ใช้สำหรับส่งข้อมูลไปยัง Server

    [HttpPost]
    public async Task<ActionResult<Customer>> AddCustomer([FromBody] Customer customer)
    {
        if (customer == null)
        {
            return BadRequest();
        }
        _context.Customers.Add(customer);
        await _context.SaveChangesAsync();

        return CreatedAtAction(nameof(GetCustomer), new { id = customer.CustomerId }, customer);
    }

8. PUT ใช้สำหรับอัปเดตข้อมูลบน Server

    [HttpPut("{id}")]
    public async Task<IActionResult> UpdateCustomer(int id,[FromBody] Customer customer)
    {
        if (id != customer.CustomerId || customer == null)
        {
            return BadRequest();
        }

        _context.Entry(customer).State = EntityState.Modified;

        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            .if (!CustomerExists(id))
            {
                .return NotFound();
            }
            .else
            {
                .throw;
            }
        }

        return NoContent();
    }

9. DELETE ใช้สำหรับลบข้อมูลบน Server

    [HttpDelete("{id}")]
    public async Task DeleteCustomer(int id)
    {
        var customer = await _context.Customers.FindAsync(id);

        if (customer == null)
        {
            return NotFound();
        }

        _context.Customers.Remove(customer);
        await _context.SaveChangesAsync();

        return NoContent();
    }

สำหรับการจัดการใช้ฟังก์ชันต่าง ๆ ของ API เพื่อคืนค่าการตอบกลับที่เหมาะสมตามสถานการณ์ต่างๆ จาก ตัวอย่างฟังก์ชันที่ใช้ ได้แก่

  • BadRequest() = "400 Bad Request"
  • NotFound() = "404 Not Found"
  • NoContent() = "204 No Content"

โดยการใช้ฟังก์ชันเหล่านี้จะช่วยให้ API สามารถสื่อสารสถานะของการดำเนินการได้เป็นอย่างดี ไม่ว่าจะเป็นการบันทึกข้อมูล, ค้นหาข้อมูล, หรือลบข้อมูล