Home > Enterprise >  CosmosDb - returns null properties .NET
CosmosDb - returns null properties .NET

Time:04-13

I have a problem with downloading CosmosDb data, even when doing it like in the tutorial.

So in the beginning, my CosmosDb looks like this:

enter image description here

I tried to simply add a new class:

 public class CaseModel
 {
        [JsonProperty("_id")]
        public string Id { get; set; }
        [JsonProperty("vin")]
        public string Vin { get; set; }
 }

and then just do like it is mentioned in the documentation

using (FeedIterator<Case> iterator = collection.GetItemLinqQueryable<Case>(true).ToFeedIterator())
{
    while (iterator.HasMoreResults)
    {
        foreach (var item in await iterator.ReadNextAsync())
        {
            var x = item;
        }
    }
}

This way, the code iterates over many elements (like it is working), but the properties are always null - as if the mapping would not work:

enter image description here

Then I tried something like this

using (FeedIterator<Case> feedIterator = collection.GetItemQueryIterator<Case>(
    "select * from cases",
    null,
    new QueryRequestOptions() { PartitionKey = new PartitionKey("shardedKey") }))
{
    while (feedIterator.HasMoreResults)
    {
        foreach (var item in await feedIterator.ReadNextAsync())
        {
            var x = item;
        }
    }
}

But this query returns no results.

I have no idea what is wrong.

Lately I was working with CosmosDb on Azure some year ago, and was doing some similar things.

The only thing that I think is strange, that the elements are marked as 'documents'

enter image description here

In the end, my code which should work looks like this

var dbClient = new CosmosClient(info.ConnectionString);
var db = dbClient.GetDatabase(info.DatabaseName);
var collection = db.GetContainer(info.Collection);

using (FeedIterator<CaseModel> iterator = collection.GetItemLinqQueryable<CaseModel>(true)
            .ToFeedIterator())
{
    while (iterator.HasMoreResults)
    {
        foreach (var item in await iterator.ReadNextAsync())
        {
            var x = item;
        }
    }
}

In the debug windows, I see that 3 steps at the beginning (like connect with connection string, then get database then get-container) work.

CodePudding user response:

You are mixing APIs. The SDK you are referencing to (Microsoft.Azure.Cosmos) is the SQL API SDK: https://docs.microsoft.com/azure/cosmos-db/sql/sql-api-sdk-dotnet-standard

The screenshot in your question is from a Mongo API account.

Either you use a SQL API account with that SDK or you use the C# Mongo driver to interact with your Mongo API account.

SQL API accounts use id as the property for Ids/document identifier, not _id.

  • Related