Космос БД - ExecuteNextAsync возвращает пустые объекты - PullRequest
0 голосов
/ 27 августа 2018

У меня есть приложение Xamarin, и я использую Cosmos DB в Azure, со стороны БД у меня есть такой документ:

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?

Есть идеи по этому поводу? Или способ отладки такого рода проблем?

Спасибо

Редактировать: я также попробовал с API-интерфейсом Cosmonaut, вот код:

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 голосов
/ 12 февраля 2019

Подобная проблема может возникнуть, если по какой-либо причине вы ошибочно подклассифицируете свой объект данных как Документ. Нет причин делать это с помощью CosmosDB SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...