0

我们使用 LiteDb 来存储对象。

我们一直遇到的一个问题是,人们正在创建包含只有公共 getter 的属性的对象。这意味着从数据库恢复对象时不会填充此属性。

默认状态下的 LiteDb 不会通过异常或其他方式通知我们有关此问题的信息。有可能改变这个吗?

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

4

1 回答 1

4

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

映射器约定

BsonMapper.ToDocument()按照以下约定,自动将类的每个属性转换为文档字段:

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

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


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

  • 只读属性(自定义设置)
  • 内部字段(自定义设置)
  • 私有属性(自定义设置)
  • IBsonMapper使用外部JSON.NET支持序列化的自定义实现。
于 2016-10-09T23:15:43.033 回答