CosmosDB MongoDB-API опускает перечисления, если значение равно нулю

В настоящее время мы перемещаем проект из 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. (К тому же такое хранилище плохое)


person auX    schedule 01.08.2019    source источник
comment
Я предполагаю, что использовать 0 для None - Entry, оставляя все серьезные записи со значением ›0 - это не вариант?   -  person Fildor    schedule 01.08.2019
comment
Не совсем, иначе проблема решилась бы   -  person auX    schedule 01.08.2019


Ответы (1)


Нет причин хранить как Enum. Просто используйте вместо этого класс:

public class EPower
{
    public int mW = 0;
    public int W = 1;
    public int kW = 2;
}
person Alex Gordon    schedule 01.08.2019
comment
Как уже говорилось, это существующее приложение, основанное на перечислениях и делающее определение доступным за пределами - person auX; 02.08.2019
comment
Хорошо, так создайте класс сопоставления между перечислением и dto? - person Alex Gordon; 05.08.2019