这篇文章只做一件事:让你在最短时间内把 TinyDb 跑起来,并完成一条完整的数据读写。
1. 安装
dotnet add package TinyDb2. 定义实体
TinyDb 的 AOT 友好路径依赖 [Entity]。建议你所有需要持久化的类型都显式标注。
using TinyDb.Attributes;
using TinyDb.Bson;
[Entity("users")]
public partial class User
{
[Id]
public ObjectId Id { get; set; } = ObjectId.NewObjectId();
[Index]
public string Name { get; set; } = string.Empty;
[Index(Unique = true)]
public string Email { get; set; } = string.Empty;
public int Age { get; set; }
[BsonIgnore]
public string? RuntimeToken { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}3. 打开数据库并执行 CRUD
using TinyDb.Core;
const string dbPath = "quickstart.db";
using var db = new TinyDbEngine(dbPath);
var users = db.GetCollection<User>();
// Create
var user = new User
{
Name = "张三",
Email = "zhangsan@example.com",
Age = 25
};
var insertedId = users.Insert(user);
Console.WriteLine($"插入成功: {insertedId}");
// Read
var loaded = users.FindById(insertedId);
Console.WriteLine($"查询结果: {loaded?.Name} / {loaded?.Email} / {loaded?.Age}");
// Update
if (loaded != null)
{
loaded.Age = 26;
users.Update(loaded);
}
// Delete
users.Delete(insertedId);
Console.WriteLine("删除完成");4. 最小可运行 Demo(可直接放 Program.cs)
using TinyDb.Attributes;
using TinyDb.Bson;
using TinyDb.Core;
[Entity("users")]
public partial class User
{
[Id]
public ObjectId Id { get; set; } = ObjectId.NewObjectId();
public string Name { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public int Age { get; set; }
}
public class Program
{
public static void Main()
{
const string dbPath = "quickstart.db";
if (File.Exists(dbPath)) File.Delete(dbPath);
using var db = new TinyDbEngine(dbPath);
var users = db.GetCollection<User>();
var u1 = new User { Name = "Alice", Email = "alice@demo.com", Age = 20 };
var u2 = new User { Name = "Bob", Email = "bob@demo.com", Age = 30 };
users.Insert(u1);
users.Insert(u2);
var adults = users.Find(x => x.Age >= 21).ToList();
Console.WriteLine($"成年人数量: {adults.Count}");
u1.Age = 21;
users.Update(u1);
Console.WriteLine($"总数: {users.Count()}");
users.Delete(u2.Id);
Console.WriteLine($"删除后总数: {users.Count()}");
}
}5. 你需要知道的三个关键点
TinyDbEngine是数据库生命周期入口,建议单例或作用域内复用。GetCollection<T>()首次调用会触发集合注册、Schema 检查和自动索引扫描。BsonIgnore字段不会持久化,常用于缓存字段、会话信息、临时状态。
6. 常见错误
未标注
[Entity]:AOT 映射路径可能失败。Update时实体没有有效Id:会抛出参数异常。直接把“运行时临时字段”当成持久化字段:读取后值为空,误以为数据丢失。
到这里你已经完成最小闭环。下一篇进入日常开发最常见的“CRUD + 批量处理”模式。
发表评论