RepoDb là một thư viện ORM (Object Relational Mapper) mã nguồn mở cho .NET, giúp bạn thao tác với cơ sở dữ liệu một cách hiệu quả, nhanh chóng và đơn giản. RepoDb được đánh giá là một giải pháp "hybrid ORM" vì nó kết hợp những ưu điểm của micro ORM (nhanh, nhẹ và dễ sử dụng) với một số tính năng của ORM toàn diện. Nhờ đó, RepoDb mang đến hiệu năng cao, đồng thời cho phép bạn kiểm soát tốt các truy vấn SQL khi cần thiết.

Tìm hiểu về RepoDb
RepoDb là một thư viện ORM (Object Relational Mapper) mã nguồn mở cho .NET, giúp bạn thao tác với cơ sở dữ liệu một cách hiệu quả, nhanh chóng và đơn giản. RepoDb được đánh giá là một giải pháp “hybrid ORM” vì nó kết hợp những ưu điểm của micro ORM (nhanh, nhẹ và dễ sử dụng) với một số tính năng của ORM toàn diện. Nhờ đó, RepoDb mang đến hiệu năng cao, đồng thời cho phép bạn kiểm soát tốt các truy vấn SQL khi cần thiết.
Dưới đây là hướng dẫn cơ bản để tích hợp và sử dụng RepoDb trong một dự án ASP.NET Core Web API.
Cài đặt RepoDb
Trước tiên, bạn cần cài đặt các package cần thiết qua NuGet. Nếu bạn sử dụng SQL Server, bạn có thể cài đặt:
dotnet add package RepoDb
dotnet add package RepoDb.SqlServer
Cấu hình chuỗi kết nốiTrong file appsettings.json, thêm chuỗi kết nối đến cơ sở dữ liệu của bạn:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
}
}
Tạo Model (Entity)
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; }
}
Khởi tạo RepoDb và cấu hình Dependency Injection (DI)
RepoDb cần được khởi tạo trước khi sử dụng. Thông thường, bạn gọi hàm khởi tạo bootstrap trong hàm Main
hoặc ngay tại đầu ứng dụng. Ngoài ra, ta sẽ đăng ký kết nối đến CSDL thông qua DI container.
Trong file Program.cs
(với .NET 6 trở lên):
using System.Data;
using System.Data.SqlClient;
using RepoDb;
// Khởi tạo RepoDb cho SQL Server (nếu sử dụng SQL Server)
SqlServerBootstrap.Initialize();
var builder = WebApplication.CreateBuilder(args);
// Lấy chuỗi kết nối từ appsettings.json
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
// Đăng ký IDbConnection dưới dạng Transient (mỗi khi cần sẽ tạo mới đối tượng kết nối)
builder.Services.AddTransient<IDbConnection>(provider =>
new SqlConnection(connectionString)
);
builder.Services.AddControllers();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Lưu ý: Việc khởi tạo
SqlServerBootstrap.Initialize()
giúp RepoDb cấu hình các mapping và extension methods cần thiết cho SQL Server.
Sử dụng RepoDb trong API Controller
Bạn có thể sử dụng các extension method của RepoDb trên đối tượng IDbConnection
để thực hiện các thao tác CRUD. Dưới đây là ví dụ về controller cho entity Product:
using Microsoft.AspNetCore.Mvc;
using System.Data;
using RepoDb;
using System.Threading.Tasks;
using System.Collections.Generic;
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
private readonly IDbConnection _connection;
public ProductsController(IDbConnection connection)
{
_connection = connection;
}
// GET: api/Products
[HttpGet]
public async Task<IActionResult> GetProducts()
{
// Sử dụng extension method QueryAllAsync của RepoDb để lấy danh sách sản phẩm
IEnumerable<Product> products = await _connection.QueryAllAsync<Product>();
return Ok(products);
}
// GET: api/Products/5
[HttpGet("{id}")]
public async Task<IActionResult> GetProduct(int id)
{
// Sử dụng extension method QueryAsync với điều kiện lấy theo Id
Product product = await _connection.QueryAsync<Product>(e => e.Id == id).ContinueWith(t => t.Result.FirstOrDefault());
if (product == null)
return NotFound();
return Ok(product);
}
// POST: api/Products
[HttpPost]
public async Task<IActionResult> PostProduct([FromBody] Product product)
{
// Chèn sản phẩm mới và lấy về Id tự động sinh ra
var insertedId = await _connection.InsertAsync<Product>(product);
product.Id = (int)insertedId;
return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product);
}
// PUT: api/Products/5
[HttpPut("{id}")]
public async Task<IActionResult> PutProduct(int id, [FromBody] Product product)
{
if (id != product.Id)
return BadRequest();
// Cập nhật sản phẩm sử dụng UpdateAsync của RepoDb
var rowsAffected = await _connection.UpdateAsync(product);
if (rowsAffected == 0)
return NotFound();
return NoContent();
}
// DELETE: api/Products/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteProduct(int id)
{
// Xóa sản phẩm theo Id sử dụng DeleteAsync của RepoDb
var rowsAffected = await _connection.DeleteAsync<Product>(e => e.Id == id);
if (rowsAffected == 0)
return NotFound();
return NoContent();
}
}
Giải thích:
- QueryAllAsync<Product>(): Lấy tất cả bản ghi của bảng Products.
- QueryAsync<Product>(e => e.Id == id): Lấy sản phẩm theo điều kiện Id.
- InsertAsync<Product>(product): Chèn mới một bản ghi và trả về Id của bản ghi vừa được chèn (nếu bảng có khóa tự tăng).
- UpdateAsync(product): Cập nhật bản ghi.
- DeleteAsync<Product>(e => e.Id == id): Xóa bản ghi theo điều kiện.
Một số lưu ý khi sử dụng RepoDb
- Hiệu năng cao: RepoDb được tối ưu hóa cho các thao tác CRUD và có hiệu năng vượt trội nhờ việc sử dụng các extension method trực tiếp trên đối tượng
IDbConnection
. - Dễ kiểm soát: Bạn có thể viết truy vấn SQL thủ công khi cần thiết hoặc sử dụng các phương thức tiện ích của RepoDb.
- Đa dạng CSDL: RepoDb hỗ trợ nhiều hệ quản trị cơ sở dữ liệu khác nhau chỉ bằng cách thay đổi provider và chuỗi kết nối.
- Tích hợp DI dễ dàng: Như ví dụ trên, việc đăng ký kết nối và sử dụng trong controller rất đơn giản nhờ tích hợp sẵn của ASP.NET Core.
Kết luận
RepoDb là một lựa chọn ORM mạnh mẽ, nhẹ và hiệu quả cho các dự án ASP.NET Core Web API. Với cách tiếp cận dựa trên extension method của đối tượng IDbConnection
, RepoDb không chỉ cho phép bạn thực hiện các thao tác CRUD một cách nhanh chóng mà còn giúp bạn kiểm soát tốt hơn các truy vấn SQL khi cần tối ưu hóa hiệu năng.
Hy vọng hướng dẫn trên sẽ giúp bạn có cái nhìn tổng quan và bắt đầu áp dụng RepoDb vào dự án của mình. Nếu có bất kỳ thắc mắc hay 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