Cosmos DB-ExecuteNextAsync返回空对象

时间:2018-08-27 20:48:28

标签: c# linq azure xamarin azure-cosmosdb

我有一个Xamarin应用程序,我在Azure上使用Cosmos DB,在数据库方面,我有这种文档:

enter image description here

{
"_id" : ObjectId("5b84142d07bf8638bcf7a089"),
"business_id" : "5b81309a7dfa952bb4036f55",
"contentType" : "image",
"media" : "https://fimgs.net/images/perfume/375x500.30796.jpg",
"id" : "22155414-ee2b-3191-c180-3bc9d40db16b"
}

在Xamarin端,我使用以下代码:

List<TempObject> TempObjects = new List<TempObject>(); 
Uri collectionUri = UriFactory.CreateDocumentCollectionUri(_databaseId, _collectionId);
var query = _client.CreateDocumentQuery<TempObject>(collectionUri).AsDocumentQuery();
while (query.HasMoreResults)
{
    TempObjects.AddRange( await query.ExecuteNextAsync<TempObject>() );
}

这是数据类定义:

class TempObject
{
    //[JsonProperty(PropertyName = "_id")]
    //public string _id { get; set; }

    [JsonProperty(PropertyName = "business_id")]
    public string business_id { get; set; }

    [JsonProperty(PropertyName = "contentType")]
    public string contentType { get; set; }

    [JsonProperty(PropertyName = "media")]
    public string media { get; set; }

    [JsonProperty(PropertyName = "id")]
    public string id { get; set; }
}

问题在于它返回了正确数量的对象,但是所有属性均为空!

已经使用默认设置创建了集合,并且数据库几乎为空,此集合中只有2个文档!

代码似乎完全遵循我找到的所有教程! 主要是这个:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/cosmosdb/consuming

此外,当我将本地CosmosDB模拟器与相同的数据库一起使用时,它可以工作,但在Azure上时却不能工作!这是否意味着我的代码正确并且问题出在Azure方面?

对这个问题有任何想法吗?还是调试此类问题的方法?

谢谢

编辑:我也尝试过Cosmonaut API,这是代码:

var cosmosSettings = new CosmosStoreSettings("soclozecosmosdb", "https://soclozedb.documents.azure.com:443/", "E2ipML2QWNVjWITKhX0K0pn7ooCWxbkEk0xkQIC6QIWQCmMjsLU3D2SRTLaIk0dB3bm4k4mWhlpYYpbgsrk2xw==");

ICosmosStore<TempObject> store = new CosmosStore<TempObject>(cosmosSettings);
var users = store.Query().ToList();

但是,查询返回0个对象!

1 个答案:

答案 0 :(得分:0)

如果由于任何原因将数据对象错误地子类化为Document,也会发生类似的问题。没有理由使用CosmosDB SDK。