В настоящее время мы перемещаем проект из MongoDB в CosmosDB с API MongoDB. В модели данных мы иногда используем перечисления и также сохраняем их (представленные как int, используя сериализатор по умолчанию) в БД.
После возникновения проблем в редких случаях мы заметили, что перечисления не хранятся в CosmosDB, когда их значение равно 0. (MongoDB хранит их в этом случае)
Есть ли способ заставить CosmosDB хранить эти записи? Реструктуризация программы будет серьезной работой, и ее следует избегать.
Пример:
public enum EPower
{
mW = 0,
W = 1,
kW = 2
}
Вставка через
var obj = new ContainingType();
// client is MongoClient
var db = client.GetDatabase(MyDB);
var collection = db.GetCollection<ContainingType>(MyCollection);
await collection.InsertOneAsync(obj);
Будет храниться в MongoDB:
{
"SomeProp": "foo",
"Power": 0
}
и в CosmosDB:
{
"SomeProp": "foo"
}
Мы также попытались заставить другое представление перечисления через ConventionPacks.
ConventionRegistry.Register("EnumStrings",
new ConventionPack { new EnumRepresentationConvention(BsonType.String) },
t => true);
Но все же перечисления опускаются, если их значение равно 0. (К тому же такое хранилище плохое)