这个项目能做什么
# RedBase — .NET 的类型化对象存储
RedBase 是一个面向 .NET 的数据平台,可将类型化对象存储在关系型后端(PostgreSQL、Microsoft SQL Server 或 SQLite——包括通过 SQLite 提供程序实现的嵌入式/离线、Blazor WebAssembly 和移动端)。您以普通 C# 类定义架构——RedBase 通过单一 LINQ 风格 API 处理存储、索引、查询、树、列表、聚合和窗口函数。
没有 Entity Framework。没有迁移。没有 40 张表的 Include 链。只有 C# 类,一行保存,一行加载。
## 为什么选择 RedBase
- **架构 = C# 类**:通过向类添加属性来添加字段;`SyncSchemeAsync()` 处理其余工作。没有迁移文件。
- **完整对象图**:嵌套的 `RedbObject<T>` 引用(单个、数组、字典)在一次调用中保存和加载——没有 JOIN 或 Include 链。
- **强类型**:每个属性映射到专用的类型化列,带外键约束和索引——不是 JSON blob。可在 SQL 级别查询。
- **内置树**:`TreeQuery<T>()` 支持递归 CTE、深度、祖先和到根的路径。
- **丰富的查询 API**:完整 LINQ 支持,包括 Where 过滤、投影、GroupBy、聚合和窗口函数(ROW_NUMBER、RANK、LAG/LEAD、NTILE、自定义帧)。
- **多提供程序**:PostgreSQL、MSSQL 和 SQLite(包括用于 Blazor WebAssembly 和移动端的纯 C#)。
## 快速开始
```csharp
// 1. 定义架构——这就是你的“迁移”
[RedbScheme("Employee")]
public class EmployeeProps
{
public string FirstName { get; set; } = "";
public string LastName { get; set; } = "";
public int Age { get; set; }
public decimal Salary { get; set; }
public string Department { get; set; } = "";
public string Position { get; set; } = "";
public DateTime HireDate { get; set; }
public string[]? Skills { get; set; }
public Address? HomeAddress { get; set; }
public Dictionary<int, decimal>? BonusByYear { get; set; }
}
// 2. 同步架构(自动创建存储)
await redb.SyncSchemeAsync<EmployeeProps>();
// 3. 保存
var employee = new RedbObject<EmployeeProps>
{
name = "New Developer",
Props = new EmployeeProps
{
FirstName = "Alice",
LastName = "Johnson",
Age = 28,
Position = "Developer",
Department = "Engineering",
Salary = 85000m,
HireDate = DateTime.Today,
Skills = ["C#", "React", "SQL"]
}
};
await redb.SaveAsync(employee);
// 4. 加载
var loaded = await redb.LoadAsync<EmployeeProps>(employee.Id);
// 5. 查询
var results = await redb.Query<EmployeeProps>()
.Where(e => e.Salary > 75000m)
.OrderByDescending(e => e.Salary)
.Take(100)
.ToListAsync();
```
## 包
| 包 | 描述 |
|---------|-------------|
| `redb.Core` | 核心抽象、查询构建器、LINQ 提供程序 |
| `redb.Postgres` | PostgreSQL 提供程序(免费,Apache 2.0) |
| `redb.MSSql` | Microsoft SQL Server 提供程序(免费,Apache 2.0) |
| `redb.SQLite` | SQLite 提供程序(免费,Apache 2.0)——嵌入式/离线,原生可加载扩展 |
| `redb.Core.Pro` | Pro 扩展:并行物化、变更跟踪、迁移 |
| `redb.Postgres.Pro` | PostgreSQL Pro 提供程序,带优化的查询生成 |
| `redb.MSSql.Pro` | MSSQL Pro 提供程序,带优化的查询生成 |
| `redb.SQLite.Pro` | SQLite Pro 提供程序——纯 C#(无原生扩展):Blazor WebAssembly 和移动端 |
| `redb.Export` | 数据库导出/导入:`.redb` 文件(JSONL/ZIP),用于备份、PostgreSQL ↔ MSSQL 之间的迁移 |
## 能力
### CRUD
- 保存单个或批量对象
- 按 ID 加载完整对象图
- 通过 COPY 协议批量插入
- 删除并可选择清除
### 丰富的 Props 结构
Props 可以包含标量、嵌套类、数组、字典(包括元组键)和 `RedbObject` 引用——任意深度。全部通过一次调用保存和加载。
### 查询功能
- **Where 过滤**:比较、AND/OR/NOT、`WhereIn`、可空检查、基础字段过滤
- **字符串操作**:Contains、StartsWith、不区分大小写(支持非英语文本的 ICU 排序规则)
- **嵌套属性**:在任意深度过滤嵌套类字段
- **数组操作**:包含元素、任意/全部组合
- **字典操作**:ContainsKey、索引器过滤、嵌套值
- **投影与分页**:Select、Distinct、OrderBy/ThenBy、Skip/Take、FirstOrDefault
- **聚合**:Sum、Average、Min/Max、批量聚合、过滤聚合
- **GroupBy**:单键或复合键、数组元素分组
- **窗口函数**:ROW_NUMBER、RANK、DENSE_RANK、运行总和、LAG/LEAD、FIRST/LAST_VALUE、NTILE、自定义帧
### 树结构
内置层次数据,采用闭包表存储和递归 CTE:
- 创建子节点
- 加载完整树并限制深度
- 获取子节点/后代
- 到根的路径
## 安装
```bash
# PostgreSQL(免费)
dotnet add package redb.Postgres
# 或 MSSQL(免费)
dotnet add package redb.MSSql
# Pro——自动包含 redb.Core.Pro
dotnet add package redb.Postgres.Pro # 或 redb.MSSql.Pro
```
## 设置
```csharp
using redb.Core;
using redb.Core.Extensions;
using redb.Postgres.Pro.Extensions;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRedbPro(options => options
.UsePostgres("Host=localhost;Database=mydb;Username=postgres;Password=pass")
.Configure(c =>
{
c.PropsSaveStrategy = PropsSaveStrategy.ChangeTracking;
c.EnableLazyReferences = false;
c.EnablePropsCache = true;
}));
var app = builder.Build();
var redb = app.Services.GetRequiredService<IRedbService>();
await redb.InitializeAsync();
await redb.SyncSchemeAsync<EmployeeProps>();
```
免费版本使用 `AddRedb` 而不是 `AddRedbPro`。
## 数据库设置选项
- 启动时自动(`InitializeAsync(ensureCreated: true)`)
- 显式调用(`EnsureDatabaseAsync()` + `InitializeAsync()`)
- 为 DBA/CI 导出 SQL 脚本(`GetSchemaScript()`)
- CLI 工具(`redb init`、`redb schema`)
## 客户端:Blazor WebAssembly 和移动端
两者都运行在 `redb.SQLite.Pro`(纯 C#)上。移动端无需特殊处理;Blazor WebAssembly 需要原生重新链接、手动初始化和应用程序级持久化。
## 许可证
免费包采用 Apache 2.0;Pro 包需要许可证(SQLite.Pro 的 3.x/4.x 系列不需要)。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。