Получить LiteDB, чтобы сообщить нам, когда свойство не может быть установлено

#c# #litedb

#c# #litedb

Вопрос:

Мы используем LiteDB для хранения объектов.

Проблема, с которой мы продолжаем сталкиваться, заключается в том, что люди создают объекты, содержащие свойства, только с общедоступными получателями. Это означает, что это свойство не заполняется при восстановлении объекта из базы данных.

LiteDB в своем состоянии по умолчанию не сообщает нам об этой проблеме с помощью исключения или иным образом. Возможно ли это изменить?

TLDR: Мы хотели бы найти способ заставить LiteDB каким-то образом сообщать нам, когда объект не может иметь свойство, установленное при внутреннем восстановлении из BSON.

Ответ №1:

LiteDB работает с документами, которые преобразуются из класса POCO BsonMapper с помощью class . BsonMapper сопоставьте свойства из класса сущностей и преобразуйте в поля документа. Текущая версия (v2) поддерживает эти правила:

Соглашения Mapper

BsonMapper.ToDocument() автоматическое преобразование каждого свойства класса в поле документа в соответствии с этими соглашениями:

  • Классы должны быть общедоступными с общедоступным конструктором без параметров
  • Свойства должны быть общедоступными
  • Свойства могут быть доступны только для чтения или чтения / записи
  • Класс должен иметь свойство Id, свойство Id или любое свойство с атрибутом [BsonId] или отображаться с помощью fluent api.
  • Свойство можно украсить [BsonIgnore] , чтобы оно не отображалось в поле документа
  • Свойство можно украсить [BsonField] , чтобы настроить имя поля документа
  • Циклические ссылки не допускаются
  • Максимальная глубина 20 внутренних классов
  • Поля класса не преобразуются в document

Вы можете использовать глобальный экземпляр BsonMapper ( BsonMapper.Global ) или пользовательский экземпляр и передать LiteDatabase в конструктор. Храните этот экземпляр в одном месте, чтобы избежать повторного создания всего сопоставления при каждом использовании database.


После запроса некоторых пользователей следующая версия (v3) будет использовать BsonMapper в качестве внутреннего плагина и будет поддерживать больше опций, таких как:

  • Свойства только для чтения (пользовательская настройка)
  • Внутренние поля (пользовательская настройка)
  • Частные свойства (пользовательская настройка)
  • Пользовательская реализация с использованием IBsonMapper сериализации с внешней JSON.NET поддержкой.