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

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 và sử dụng trong ASP.NET Core Web API
Tìm hiểu về RepoDb và sử dụng trong ASP.NET Core Web API

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!

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