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

ServiceStack OrmLite là một thư viện ORM nhẹ, đơn giản và hiệu quả, giúp bạn chuyển đổi dữ liệu từ cơ sở dữ liệu sang các đối tượng .NET một cách nhanh chóng. Nó cho phép bạn viết các truy vấn SQL theo kiểu LINQ và cung cấp một API trực quan để thực hiện các thao tác CRUD mà không phải lo lắng về các chi tiết phức tạp của ADO.NET. Dưới đây là hướng dẫn cơ bản để tích hợp ServiceStack.OrmLite vào dự án ASP.NET Core Web API.
Tìm hiểu về ServiceStack OrmLite và sử dụng trong ASP.NET Core Web API
Tìm hiểu về ServiceStack OrmLite và sử dụng trong ASP.NET Core Web API

Tìm hiểu về ServiceStack OrmLite

ServiceStack OrmLite là một thư viện ORM nhẹ, đơn giản và hiệu quả, giúp bạn chuyển đổi dữ liệu từ cơ sở dữ liệu sang các đối tượng .NET một cách nhanh chóng. Nó cho phép bạn viết các truy vấn SQL theo kiểu LINQ và cung cấp một API trực quan để thực hiện các thao tác CRUD mà không phải lo lắng về các chi tiết phức tạp của ADO.NET. Dưới đây là hướng dẫn cơ bản để tích hợp ServiceStack.OrmLite vào dự án ASP.NET Core Web API.

Cài đặt ServiceStack OrmLite

Trước tiên, bạn cần cài đặt các package cần thiết thông qua NuGet. Nếu bạn sử dụng SQL Server, bạn có thể cài đặt các package sau:

dotnet add package ServiceStack.OrmLite
dotnet add package ServiceStack.OrmLite.SqlServer

Nếu bạn dùng cơ sở dữ liệu khác, hãy thay thế package tương ứng (ví dụ: MySQL, PostgreSQL, SQLite,…).

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

Trong file appsettings.json, thêm chuỗi kết nối đến cơ sở dữ liệu:

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

Cấu hình Dependency Injection (DI) cho ServiceStack OrmLite

Trong file Program.cs (với .NET 6 trở lên), cấu hình DI để đăng ký đối tượng IDbConnectionFactoryIDbConnection:

using ServiceStack.OrmLite;
using ServiceStack.OrmLite.SqlServer;
using System.Data;

var builder = WebApplication.CreateBuilder(args);

// Lấy chuỗi kết nối từ appsettings.json
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");

// Đăng ký IDbConnectionFactory dưới dạng singleton
builder.Services.AddSingleton<IDbConnectionFactory>(new OrmLiteConnectionFactory(
    connectionString,
    SqlServerDialect.Provider
));

// Đăng ký IDbConnection với vòng đời scoped (một phiên cho mỗi request)
builder.Services.AddScoped<IDbConnection>(provider =>
    provider.GetRequiredService<IDbConnectionFactory>().OpenDbConnection()
);

builder.Services.AddControllers();

var app = builder.Build();

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

Tạo Model (Entity)

Giả sử bạn có bảng Products trong cơ sở dữ liệu, tạo lớp Product. ServiceStack OrmLite sử dụng các attribute để định nghĩa mapping (tùy chọn):

using ServiceStack.DataAnnotations;

[Alias("Products")]
public class Product
{
    [AutoIncrement] // Tự động tăng giá trị cho khóa chính
    public int Id { get; set; }
    
    public string Name { get; set; }
    
    public decimal Price { get; set; }
}

Chú ý: Attribute [Alias("Products")] giúp xác định tên bảng tương ứng trong cơ sở dữ liệu. Nếu tên lớp trùng với tên bảng, bạn có thể bỏ qua.

Tạo API Controller sử dụng OrmLite

Tạo controller để cung cấp các endpoint CRUD cho entity Product. Bạn có thể thực hiện các thao tác trực tiếp thông qua đối tượng IDbConnection.

using Microsoft.AspNetCore.Mvc;
using System.Data;
using ServiceStack.OrmLite;

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

    public ProductsController(IDbConnection db)
    {
        _db = db;
        // Tạo bảng nếu chưa tồn tại (chỉ nên thực hiện trong môi trường dev hoặc thông qua migration)
        _db.CreateTableIfNotExists<Product>();
    }

    // GET: api/Products
    [HttpGet]
    public IActionResult GetProducts()
    {
        var products = _db.Select<Product>();
        return Ok(products);
    }

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

    // POST: api/Products
    [HttpPost]
    public IActionResult PostProduct([FromBody] Product product)
    {
        // Chèn bản ghi mới và trả về ID của bản ghi vừa tạo
        var id = (int)_db.Insert(product, selectIdentity: true);
        product.Id = id;
        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();

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

    // DELETE: api/Products/5
    [HttpDelete("{id}")]
    public IActionResult DeleteProduct(int id)
    {
        _db.DeleteById<Product>(id);
        return NoContent();
    }
}

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

  • Hiệu suất và đơn giản: OrmLite được thiết kế nhẹ, hiệu quả và dễ sử dụng, thích hợp cho các ứng dụng cần hiệu năng cao mà không cần các tính năng phức tạp của các ORM toàn diện.
  • Mapping linh hoạt: Bạn có thể sử dụng attribute hoặc tuân theo quy ước đặt tên để ánh xạ giữa các trường trong cơ sở dữ liệu và thuộc tính của lớp.
  • Quản lý kết nối: Đảm bảo sử dụng đúng vòng đời cho đối tượng IDbConnection (thường là scoped) để tránh rò rỉ tài nguyên.
  • Tùy chỉnh truy vấn: OrmLite cho phép bạn viết các truy vấn tùy chỉnh khi cần, đồng thời vẫn cung cấp các phương thức hỗ trợ CRUD cơ bản.

Kết luận

ServiceStack OrmLite là một giải pháp ORM nhẹ, dễ tích hợp và hiệu quả cho các ứng dụng ASP.NET Core Web API. Với việc cấu hình đơn giản qua Dependency Injection, định nghĩa entity bằng attributes và sử dụng các phương thức trực quan để thao tác dữ liệu, bạn có thể nhanh chóng xây dựng các API CRUD mà vẫn có khả năng kiểm soát chi tiết các truy vấn SQL khi cần thiết.

Nếu bạn có thắc mắc hay cần hỗ trợ thêm về ServiceStack OrmLite, hãy đặt câu hỏi để được trợ giúp!

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