获取LiteDb,以便在无法设置属性时通知我们

时间:2016-10-05 15:14:13

标签: c# litedb

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

我们遇到的一个问题是,人们正在创建包含仅包含公共getter的属性的对象。这意味着从数据库还原对象时,此属性已填充。

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

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

1 个答案:

答案 0 :(得分:3)

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

映射器约定

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

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

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

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

  • 只读属性(自定义设置)
  • 内部字段(自定义设置)
  • 私人资源(自定义设置)
  • 使用IBsonMapper自定义实施,外部JSON.NET支持序列化。