Trang Designer – Thiết kế website – Mua bán theme giá rẻ, plugin giá rẻ – Dịch vụ thiết kế website giá rẻ chuyên nghiệp chuẩn SEO – Mua bán theme giá rẻ, plugin giá rẻ chính hãng 100% từ nhà cung cấp, hỗ trợ update trọn đời

PetaPoco là một Micro ORM (Object-Relational Mapper) nhẹ và đơn giản, cho phép bạn thao tác với cơ sở dữ liệu một cách trực tiếp thông qua các câu lệnh SQL đồng thời tự động ánh xạ (mapping) dữ liệu giữa bảng cơ sở dữ liệu và các đối tượng trong ứng dụng .NET. So với các ORM toàn diện như Entity Framework hay NHibernate, PetaPoco tập trung vào tính hiệu quả, dễ sử dụng và kiểm soát tốt hơn đối với các câu lệnh SQL.
Tìm hiểu về PetaPoco ORM và sử dụng trong ASP.NET Core Web API
Tìm hiểu về PetaPoco ORM và sử dụng trong ASP.NET Core Web API

Tìm hiểu về PetaPoco

PetaPoco là một Micro ORM (Object-Relational Mapper) nhẹ và đơn giản, cho phép bạn thao tác với cơ sở dữ liệu một cách trực tiếp thông qua các câu lệnh SQL đồng thời tự động ánh xạ (mapping) dữ liệu giữa bảng cơ sở dữ liệu và các đối tượng trong ứng dụng .NET. So với các ORM toàn diện như Entity Framework hay NHibernate, PetaPoco tập trung vào tính hiệu quả, dễ sử dụng và kiểm soát tốt hơn đối với các câu lệnh SQL.

Dưới đây là hướng dẫn cơ bản để tích hợp PetaPoco vào một dự án ASP.NET Core Web API.

Cài đặt PetaPoco

Bạn có thể cài đặt PetaPoco qua NuGet bằng lệnh sau:

dotnet add package PetaPoco

Cấu hình chuỗi kết nối

Trong file appsettings.json, thêm chuỗi kết nối tới cơ sở dữ liệu của bạn. Ví dụ:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
  }
}

Tạo Model

Giả sử bạn có bảng Products trong cơ sở dữ liệu, tạo lớp Product tương ứng:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

Tích hợp PetaPoco qua Dependency Injection

PetaPoco sử dụng lớp Database để thực hiện các thao tác truy xuất dữ liệu. Vì Database là đối tượng có thể được tạo dựa trên chuỗi kết nối, bạn có thể đăng ký nó trong DI container.

Cách 1: Đăng ký Database trực tiếp trong DI
Trong file Program.cs (với .NET 6 trở lên):

var builder = WebApplication.CreateBuilder(args);

// Đăng ký Database với vòng đời Transient (mỗi lần request sẽ tạo mới)
builder.Services.AddTransient<PetaPoco.Database>(provider =>
{
    var configuration = provider.GetRequiredService<IConfiguration>();
    var connectionString = configuration.GetConnectionString("DefaultConnection");
    // "System.Data.SqlClient" là provider cho SQL Server. Cập nhật nếu dùng database khác.
    return new PetaPoco.Database(connectionString, "System.Data.SqlClient");
});

builder.Services.AddControllers();
builder.Services.AddTransient<ProductsRepository>(); // Đăng ký repository

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

Tạo Repository sử dụng PetaPoco

Để tách riêng logic truy xuất dữ liệu, bạn có thể tạo lớp Repository. Ví dụ, tạo lớp ProductsRepository để thực hiện CRUD cho bảng Products:

using System.Collections.Generic;
using PetaPoco;

public class ProductsRepository
{
    private readonly Database _database;

    public ProductsRepository(Database database)
    {
        _database = database;
    }

    // Lấy danh sách tất cả sản phẩm
    public IEnumerable<Product> GetAll()
    {
        return _database.Query<Product>("SELECT * FROM Products");
    }

    // Lấy sản phẩm theo Id
    public Product GetById(int id)
    {
        return _database.FirstOrDefault<Product>("WHERE Id = @0", id);
    }

    // Thêm sản phẩm mới
    public void Insert(Product product)
    {
        _database.Insert(product);
    }

    // Cập nhật sản phẩm
    public void Update(Product product)
    {
        _database.Update(product);
    }

    // Xóa sản phẩm theo Id
    public void Delete(int id)
    {
        _database.Delete<Product>(id);
    }
}

Tạo API Controller sử dụng Repository

Tạo controller để cung cấp các endpoint CRUD cho Product. Ví dụ:

using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
    private readonly ProductsRepository _repository;

    public ProductsController(ProductsRepository repository)
    {
        _repository = repository;
    }

    // GET: api/Products
    [HttpGet]
    public IActionResult GetProducts()
    {
        var products = _repository.GetAll();
        return Ok(products);
    }

    // GET: api/Products/5
    [HttpGet("{id}")]
    public IActionResult GetProduct(int id)
    {
        var product = _repository.GetById(id);
        if (product == null)
            return NotFound();
        return Ok(product);
    }

    // POST: api/Products
    [HttpPost]
    public IActionResult PostProduct([FromBody] Product product)
    {
        _repository.Insert(product);
        // Sau khi thêm, thường nên trả về thông tin sản phẩm mới tạo
        return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product);
    }

    // PUT: api/Products/5
    [HttpPut("{id}")]
    public IActionResult PutProduct(int id, [FromBody] Product product)
    {
        if (id != product.Id)
            return BadRequest();

        _repository.Update(product);
        return NoContent();
    }

    // DELETE: api/Products/5
    [HttpDelete("{id}")]
    public IActionResult DeleteProduct(int id)
    {
        _repository.Delete(id);
        return NoContent();
    }
}

Một số lưu ý khi sử dụng PetaPoco

  • Kiểm soát SQL: PetaPoco cho phép bạn viết trực tiếp các câu lệnh SQL, giúp tối ưu hóa hiệu suất và linh hoạt trong các truy vấn phức tạp.
  • Mapping: Mặc dù PetaPoco sử dụng các quy ước đặt tên để tự động ánh xạ các cột trong bảng vào thuộc tính của đối tượng, bạn có thể tùy chỉnh bằng cách sử dụng các attribute (như [TableName], [PrimaryKey], …) nếu cần.
  • Quản lý kết nối: Vì đối tượng Database có thể quản lý kết nối tới cơ sở dữ liệu, hãy chú ý đến việc sử dụng đúng vòng đời (lifecycle) của nó khi đăng ký trong DI container (thường là Transient).

Kết luận

PetaPoco là một lựa chọn Micro ORM hiệu quả, giúp bạn thao tác với cơ sở dữ liệu một cách đơn giản mà vẫn cho phép kiểm soát chi tiết các truy vấn SQL. Với hướng dẫn tích hợp trên, bạn có thể dễ dàng bắt đầu sử dụng PetaPoco trong dự án ASP.NET Core Web API của mình. Nếu có thắc mắc hoặc cần hỗ trợ thêm, bạn cứ thoải mái đặt câu hỏi!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

pzf-icon