.Net ABP Zero sqlite 集成
安装
安装 Microsoft.EntityFrameworkCore.Sqlite
NuGet 包到 *.EntityFrameworkCore 项目.
注: 不要安装 成Microsoft.EntityFrameworkCore.Sqlite.Core 会报错的.
配置DbContext
由于SQLite不支持多线程,因此应该在*EntityFrameworkModule.PreInitialize()
方法中禁用事务。
public class 你的项目名称EntityFrameworkModule : AbpModule { public override void PreInitialize() { ... // add this line to disable transactions Configuration.UnitOfWork.IsTransactional = false; ... } }
替换 你的项目名称DbContextConfigurer.cs
public static class SqliteDemoDbContextConfigurer { public static void Configure(DbContextOptionsBuilder<SqliteDemoDbContext> builder, string connectionString) { builder.UseSqlite(connectionString); } public static void Configure(DbContextOptionsBuilder<SqliteDemoDbContext> builder, DbConnection connection) { builder.UseSqlite(connection); } }
配置连接字符串
在* .Web.Mvc / appsettings.json中将连接字符串更改为SQLite连接。例:
{ "ConnectionStrings": { "Default": "Data Source=SqliteDemoDb.db" }, ... }
创建数据库
在创建数据库之前,删除* .EntityFrameworkCore / Migrations文件夹下的所有迁移类。
注:Migrations文件夹下 除了Seed文件夹,其他的迁移类都要删除,不然始终不会生成数据库表.特别是*bContextModelSnapshot文件.不删不会创建表.
现在它已经准备好构建数据库了。
- 选择* .Web.Mvc作为启动项目。
- 打开包管理器控制台并选择* .EntityFrameworkCore项目。
- 运行
add-migration Initial_Migration
命令 - 运行
update-database
命令
SQLite集成现已完成。
hangfire与Sqlite集成
修改Startup.cs
if (WebConsts.HangfireDashboardEnabled) { services.AddHangfire(config => { config.UseSQLiteStorage(_appConfiguration.GetConnectionString("Default")); }); } JobStorage.Current = new SQLiteStorage(_appConfiguration.GetConnectionString("Default"));
其他问题
与SQLite集成.由于多线程的问题.不能开启事务.有些代码就i需要调整.
比如:Abp 自带事件中 EntityCreatingEventData ,EntityUpdatingEventData等.执行中的任务. 跑出异常后数据不会回滚