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

如何阻止LiteDB自动为数据表添加_type列?

如何阻止LiteDB自动添加_type列

LiteDB自动生成_type列,主要是为了在序列化/反序列化时记录类型信息,常见于多态、动态类型或非泛型集合操作的场景。以下是几种直接有效的控制方法:

  • 使用强类型集合操作
    始终通过泛型方法GetCollection<T>获取集合,LiteDB能明确识别实体的具体类型,不会自动添加_type列。示例代码:

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
    
    using (var db = new LiteDatabase("store.db"))
    {
        var products = db.GetCollection<Product>("products");
        products.Insert(new Product { Name = "Laptop", Price = 999.99m });
    }
    
  • 全局禁用类型信息
    通过BsonMapper全局配置关闭所有实体的_type列生成,适合整个项目都不需要多态类型支持的场景:

    // 放在项目启动初始化的位置
    BsonMapper.Global.DisableTypeInfo = true;
    
    using (var db = new LiteDatabase("store.db"))
    {
        // 所有集合操作都不会生成_type列
    }
    
  • 针对单个实体类禁用
    如果只是特定几个实体不需要_type列,可以单独配置实体映射:

    // 仅禁用Product类的_type列
    BsonMapper.Global.Entity<Product>().DisableTypeInfo();
    
  • 避免动态/非泛型操作
    不要使用非泛型的GetCollection()方法,也不要插入dynamic类型对象——这类操作会让LiteDB无法确定目标类型,从而自动添加_type列来记录类型信息。

注意事项

如果后续需要处理多态继承场景(比如插入基类实例但实际是子类对象),禁用_type列会导致反序列化时无法还原正确的子类类型,所以仅在确定不需要多态支持的场景下使用上述配置。

内容的提问来源于stack exchange,提问作者spsuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:07:37