当无法设置 属性 时让 LiteDb 通知我们

Get LiteDb to inform us when a property cannot be set

我们正在使用 LiteDb 来存储对象。

我们一直遇到的一个问题是人们创建的对象只包含 public 个吸气剂。这意味着当从数据库中恢复对象时,此 属性 不会 填充。

处于默认状态的 LiteDb 不会通过异常或其他方式通知我们有关此问题的信息。是否可以更改此设置?

TLDR: 我们想找到一种方法让 LiteDb 在对象从 BSON 内部复活时无法设置 属性 时以某种方式通知我们。

LiteDB 使用 BsonMapper class 从 POCO class 转换而来的文档。 BsonMapper 从实体 class 映射属性并转换为文档字段。当前版本 (v2) 支持此规则:

映射器约定

BsonMapper.ToDocument() 自动将 class 的每个 属性 转换为遵循这些约定的文档字段:

  • Classes 必须是 public 和 public 无参数构造函数
  • 属性必须是 public
  • 属性可以是只读的或read/write
  • class 必须有一个 Id 属性、Id 属性 或任何具有 [BsonId] 属性的 属性 或由 fluent api 映射。
  • A 属性 可以用 [BsonIgnore] 修饰,以不映射到文档字段
  • 一个属性可以用[BsonField]修饰自定义文档字段的名称
  • 不允许循环引用
  • 最大深度 20 内部 classes
  • Class 字段未转换为文档

您可以使用 BsonMapper 全局实例 (BsonMapper.Global) 或自定义实例并在构造函数中传递给 LiteDatabase。将此实例保存在一个地方以避免每次使用数据库时都重新创建所有映射。


根据一些用户的要求,下一个版本 (v3) 会将 BsonMapper 作为内部插件线程化,并将支持更多选项,例如:

  • 只读属性(自定义设置)
  • 内部字段(自定义设置)
  • 私有属性(自定义设置)
  • 使用 IBsonMapper 和外部 JSON.NET 支持序列化的自定义实现。