簡體   English   中英

如果值等於零,CosmosDB MongoDB-API將省略枚舉

[英]CosmosDB MongoDB-API omitting enums if value equals zero

當前,我們正在使用MongoDB API將項目從MongoDB遷移到CosmosDB。 在數據模型中,有時我們還會使用枚舉並將它們(使用默認的序列化器表示為int)存儲在數據庫中。

在極少數情況下遇到問題后,我們觀察到,當枚舉的值等於0時,該枚舉未存儲在CosmosDB中。(在這種情況下,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,則仍會省略。(此外,這種存儲方式很糟糕)

沒有理由將其存儲為Enum 只需使用一個類代替:

public class EPower
{
    public int mW = 0;
    public int W = 1;
    public int kW = 2;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM