You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LiteDb中子列表类自增ID问题:如何实现B、C类ID自动递增?

在LiteDb中实现嵌套子列表的ID自动递增

LiteDb默认仅会为根集合中的文档自动生成自增ID,嵌套在列表中的子文档(比如你的B和C类)不会触发自动ID生成逻辑,因此它们的Id始终为0。以下是两种可行的解决方式:

方式一:将子文档作为独立集合存储

把B和C分别存入独立的LiteDb集合,这样它们的Id会被自动赋值,之后再关联到A的列表中。示例代码:

using (var db = new LiteDatabase(@"MyData.db"))
{
    var colA = db.GetCollection<A>("As");
    var colB = db.GetCollection<B>("Bs");
    var colC = db.GetCollection<C>("Cs");

    // 插入C并获取自动生成的Id
    var c1 = new C { Value = "C1" };
    colC.Insert(c1);

    // 插入B并获取自动生成的Id,关联已插入的C
    var b1 = new B { Value = "B1", Cs = new List<C> { c1 } };
    colB.Insert(b1);

    // 插入A,关联已插入的B
    var a1 = new A { Value = "A1", Bs = new List<B> { b1 } };
    colA.Insert(a1);
}

这种方式的优势是完全利用LiteDb原生的自增ID机制,无需额外维护逻辑;缺点是B和C会作为独立文档存储,而非嵌入在A中。

方式二:手动维护序列生成嵌入文档的Id

如果需要保持B和C作为A的嵌入文档,可以通过LiteDb的序列功能手动生成自增ID:

using (var db = new LiteDatabase(@"MyData.db"))
{
    var colA = db.GetCollection<A>("As");

    // 生成C的自增Id
    var cIdSequence = db.GetSequence("C_Id");
    var c1 = new C { Id = cIdSequence.Next(), Value = "C1" };

    // 生成B的自增Id
    var bIdSequence = db.GetSequence("B_Id");
    var b1 = new B { Id = bIdSequence.Next(), Value = "B1", Cs = new List<C> { c1 } };

    // 插入包含嵌入文档的A
    var a1 = new A { Value = "A1", Bs = new List<B> { b1 } };
    colA.Insert(a1);
}

GetSequence方法会自动创建并维护序列,每次调用Next()都会返回下一个递增的整数值,确保B和C的Id唯一且自增。

内容的提问来源于stack exchange,提问作者Zoltán

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:15:29