JCode.ORMX.DbProvider.SQLite
1.0.3
dotnet add package JCode.ORMX.DbProvider.SQLite --version 1.0.3
NuGet\Install-Package JCode.ORMX.DbProvider.SQLite -Version 1.0.3
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="JCode.ORMX.DbProvider.SQLite" Version="1.0.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="JCode.ORMX.DbProvider.SQLite" Version="1.0.3" />
<PackageReference Include="JCode.ORMX.DbProvider.SQLite" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add JCode.ORMX.DbProvider.SQLite --version 1.0.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: JCode.ORMX.DbProvider.SQLite, 1.0.3"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package JCode.ORMX.DbProvider.SQLite@1.0.3
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=JCode.ORMX.DbProvider.SQLite&version=1.0.3
#tool nuget:?package=JCode.ORMX.DbProvider.SQLite&version=1.0.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
JCode.ORMX.DbProvider.SQLite
SQLite 数据库提供程序,用于 JCode.ORMX 框架。该提供程序使您能够使用 SQLite 作为 JCode.ORMX 的后端数据库。
功能特性
- 完整的 SQLite 支持:支持 SQLite 的所有基本操作
- 类型安全:使用强类型实体类,避免运行时错误
- LINQ 表达式树:使用 LINQ 表达式进行查询,编译时类型检查
- 表管理:自动创建和管理 SQLite 表
- 事务支持:支持 SQLite 事务操作
- 批量操作:支持批量插入、更新、删除
- 参数化查询:自动参数化查询,防止 SQL 注入
- 内存数据库:支持内存数据库模式
- 加密支持:支持 SQLite 数据库加密
- 轻量级:零配置,无需安装数据库服务器
- 跨平台:支持 Windows、Linux、macOS、iOS、Android
安装
NuGet 包
Install-Package JCode.ORMX.DbProvider.SQLite
依赖项
- System.Data.SQLite (1.0.118 或更高版本) 或 Microsoft.Data.Sqlite (7.x 或更高版本)
- JCode.ORMX (1.0.0 或更高版本)
快速开始
1. 定义实体类
[Table("Users")]
public class User
{
[Column(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
[Column]
public string Name { get; set; }
[Column]
public string Email { get; set; }
[Column]
public DateTime CreatedAt { get; set; }
}
2. 初始化 SQLite 提供程序
// 文件数据库
var provider = new SQLiteProvider("Data Source=mydb.db;");
// 内存数据库
var provider = new SQLiteProvider("Data Source=:memory:;");
// 带连接池的数据库
var connectionString = "Data Source=mydb.db;" +
"Version=3;" +
"Pooling=true;" +
"Max Pool Size=100;" +
"Journal Mode=WAL;" +
"Synchronous=Normal";
var provider = new SQLiteProvider(connectionString);
3. 创建表
var tableManager = provider.GetTableManager();
tableManager.Create(typeof(User));
4. 基本操作
var table = tableManager.Table<User>();
// 插入
var user = new User
{
Name = "John",
Email = "john@example.com",
CreatedAt = DateTime.Now
};
table.Insert(user);
// 查询
var users = table.Find()
.Where(u => u.Name == "John")
.OrderBy(u => u.Id)
.Limit(10)
.GetList();
// 更新
table.Update()
.Set("Email", "newemail@example.com")
.Where(u => u.Id == 1)
.Execute();
// 删除
table.Delete()
.Where(u => u.Id == 1)
.Execute();
高级功能
事务操作
using (var transaction = provider.BeginTransaction())
{
try
{
var table = transaction.Table<User>();
table.Insert(user1);
table.Insert(user2);
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
}
内存数据库
// 创建内存数据库
var provider = new SQLiteProvider("Data Source=:memory:;");
// 内存数据库中的数据在连接关闭后会丢失
// 如果需要持久化,可以使用 ATTACH DATABASE 命令
加密数据库
// 使用加密的数据库
var connectionString = "Data Source=encrypted.db;" +
"Password=your_password;" +
"Version=3";
var provider = new SQLiteProvider(connectionString);
聚合查询
var result = table.Aggregate()
.GroupBy("Department")
.Count("EmployeeCount", "Id")
.Avg("AvgSalary", "Salary")
.GetList();
连接查询
var result = table.Find()
.InnerJoin<Order>((u, o) => u.Id == o.UserId)
.Where(u => u.Name == "John")
.GetList();
批量操作
// 批量插入
var users = new List<User> { /* ... */ };
table.InsertAll(users);
// 批量更新
table.UpdateAll(users);
// 批量删除
table.DeleteAll(users);
全文搜索(FTS5)
// 创建 FTS5 虚拟表
var tableManager = provider.GetTableManager();
tableManager.ExecuteSql("CREATE VIRTUAL TABLE Users_fts USING fts5(Name, Email)");
// 插入数据到虚拟表
tableManager.ExecuteSql("INSERT INTO Users_fts(rowid, Name, Email) SELECT Id, Name, Email FROM Users");
// 全文搜索
var results = table.Find()
.Where("Name MATCH 'John*'")
.GetList();
配置选项
连接字符串选项
var connectionString = "Data Source=mydb.db;" +
"Version=3;" + // SQLite 版本
"Pooling=true;" + // 启用连接池
"Max Pool Size=100;" + // 最大连接池大小
"Journal Mode=WAL;" + // 日志模式:WAL、DELETE、TRUNCATE、PERSIST、MEMORY、OFF
"Synchronous=Normal;" + // 同步模式:FULL、NORMAL、OFF
"Cache Size=-10000;" + // 缓存大小(负值表示 KB)
"Page Size=4096;" + // 页大小
"Default Timeout=30;" + // 默认超时(秒)
"FailIfMissing=False;" + // 如果数据库不存在是否失败
"Read Only=False;" + // 只读模式
"Password=your_password;" + // 数据库密码
"Foreign Keys=True;" + // 启用外键约束
"Recursive Triggers=True;" + // 递归触发器
"Default IsolationLevel=Serializable;" + // 默认隔离级别
"NoSharedCache=True;" + // 禁用共享缓存
"Open Mode=ReadWriteCreate;" + // 打开模式
"DateTimeFormat=ISO8601;" + // 日期时间格式
"DateTimeKind=Utc;" + // 日期时间种类
"BinaryGUID=False;" + // GUID 存储格式
var provider = new SQLiteProvider(connectionString);
类型映射
SQLite 提供程序支持以下 .NET 类型到 SQLite 类型的映射:
| .NET 类型 | SQLite 类型 |
|---|---|
| int | INTEGER |
| long | INTEGER |
| short | INTEGER |
| byte | INTEGER |
| bool | INTEGER |
| decimal | REAL |
| double | REAL |
| float | REAL |
| string | TEXT |
| DateTime | TEXT (ISO8601 格式) |
| DateTimeOffset | TEXT (ISO8601 格式) |
| Guid | TEXT |
| byte[] | BLOB |
| enum | INTEGER |
性能建议
- 使用 WAL 模式:启用 WAL 日志模式提高并发性能
- 批量操作:使用 InsertAll、UpdateAll、DeleteAll 进行批量操作
- 查询优化:只查询需要的字段,使用 LIMIT 限制结果集
- 连接池:合理配置连接池大小
- 事务范围:尽量缩小事务范围,减少锁持有时间
- 避免 N+1 查询:使用连接查询代替多次查询
- 使用索引:为常用查询字段创建索引
- 内存数据库:对于临时数据使用内存数据库
故障排除
常见问题
Q: 数据库文件被锁定 A: 确保使用 WAL 模式,检查是否有其他进程正在访问数据库
Q: 查询性能慢 A: 使用 EXPLAIN QUERY PLAN 分析查询计划,添加适当的索引
Q: 内存不足 A: 调整 Cache Size 参数,增加缓存大小
Q: 批量操作失败 A: 减少批量操作的数据量,分批执行
Q: 日期时间格式问题 A: 设置 DateTimeFormat=ISO8601 和 DateTimeKind=Utc
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- JCode.ORMX (>= 1.0.3)
- Microsoft.Data.Sqlite (>= 10.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.