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
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!
CÔNG TY TNHH GIẢI PHÁP CÔNG NGHỆ TRANG DESIGNER
Trang Designer chuyên thiết kế website chuẩn SEO, thiết kế logo toàn diện giúp doanh nghiệp xây dựng một thương hiệu mạnh và bán hàng hiệu quả trên các nền tảng số cho nhiều lĩnh vực kinh doanh.
Vui lòng liên hệ: 138 Hiền Vương, Phường Phú Thạnh, Quận Tân Phú, TP. Hồ Chí Minh
Điện thoại: 0903.728.335
Website: www.trangdesigner.id.vn