#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
поддержкой.