Tích hợp SQLite vào dự án .NET sử dụng ABP Framework

Cài đặt

Cài đặt gói NuGet Microsoft.EntityFrameworkCore.Sqlite vào project **.EntityFrameworkCore**.

Lưu ý: Không cài đặt gói Microsoft.EntityFrameworkCore.Sqlite.Core vì sẽ gây lỗi.

Cấu hình DbContext

Do SQLite không hỗ trợ đa luồng, cần vô hiệu hóa transaction trong phương thức PreInitialize() của EntityFrameworkModule.

public class TenDuAnEntityFrameworkModule : AbpModule
{
    public override void PreInitialize()
    {
        ...
        // Thêm dòng này để tắt transaction
        Configuration.UnitOfWork.IsTransactional = false;
        ...
    }
}

Cập nhật file DbContextConfigurer.cs

public static class DuAnDbContextConfigurer
{
    public static void Configure(DbContextOptionsBuilder<DuAnDbContext> builder, string connectionString)
    {
        builder.UseSqlite(connectionString);
    }

    public static void Configure(DbContextOptionsBuilder<DuAnDbContext> builder, DbConnection connection)
    {
        builder.UseSqlite(connection);
    }
}

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

Thay đổi chuỗi kết nối trong file **.Web.Mvc/appsettings.json** thành chuỗi kết nối SQLite:

{
  "ConnectionStrings": {
    "Default": "Data Source=DuAnDb.db"
  },
  ...
}

Tạo cơ sở dữ liệu

Trước khi tạo database, xóa tất cả các lớp migration trong thư mục **.EntityFrameworkCore/Migrations**.

Lưu ý: Xóa tất cả file trong thư mục Migrations ngoại trừ thư mục Seed, đặc biệt là file *ContextModelSnapshot.

Thực hiện các bước sau:

  • Chọn **.Web.Mvc** làm startup project
  • Mở Package Manager Console và chọn project **.EntityFrameworkCore**
  • Chạy lệnh add-migration Initial_Migration
  • Chạy lệnh update-database

Tích hợp Hangfire với SQLite

Cài đặt gói Hangfire.SQLite.Core và cập nhật file Startup.cs:

if (WebConsts.HangfireDashboardEnabled)
{
    services.AddHangfire(config =>
    {
        config.UseSQLiteStorage(_appConfiguration.GetConnectionString("Default"));
    });
}
JobStorage.Current = new SQLiteStorage(_appConfiguration.GetConnectionString("Default"));

Lưu ý quan trọng

Khi tích hợp với SQLite, do không sử dụng transaction, các sự kiện như EntityCreatingEventData, EntityUpdatingEventData khi xảy ra lỗi sẽ không rollback dữ liệu.

Thẻ: ABP Framework SQLite Entity Framework Core Hangfire .NET

Đăng vào ngày 18 tháng 8 lúc 16:58