CosmosDb - returns 空属性 .NET
CosmosDb - returns null properties .NET
我在下载 CosmosDb 数据时遇到问题,即使按照教程中的方式进行也是如此。
所以一开始,我的 CosmosDb 看起来像这样:
我试图简单地添加一个新的 class:
public class CaseModel
{
[JsonProperty("_id")]
public string Id { get; set; }
[JsonProperty("vin")]
public string Vin { get; set; }
}
然后按照文档中提到的那样做
using (FeedIterator<Case> iterator = collection.GetItemLinqQueryable<Case>(true).ToFeedIterator())
{
while (iterator.HasMoreResults)
{
foreach (var item in await iterator.ReadNextAsync())
{
var x = item;
}
}
}
这样,代码迭代了许多元素(就像它正在工作一样),
但属性总是 null
- 好像映射不起作用:
然后我尝试了类似的方法
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;
}
}
}
但是这个查询returns没有结果。
我不知道哪里出了问题。
最近几年我在 Azure 上使用 CosmosDb,并在做一些类似的事情。
我唯一觉得奇怪的是,元素被标记为'documents'
最后,我的代码应该是这样的
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;
}
}
}
在调试 windows 中,我看到开头的 3 个步骤(例如使用连接字符串连接,然后获取数据库,然后获取容器)有效。
您正在混合 APIs。您引用的 SDK (Microsoft.Azure.Cosmos) 是 SQL API SDK:https://docs.microsoft.com/azure/cosmos-db/sql/sql-api-sdk-dotnet-standard
您问题中的屏幕截图来自 Mongo API 帐户。
您可以使用带有该 SDK 的 SQL API 帐户,或者使用 C# Mongo driver 与您的 Mongo API 帐户进行交互。
SQL API 帐户使用 id
作为 Ids/document 标识符的 属性,而不是 _id
。
我在下载 CosmosDb 数据时遇到问题,即使按照教程中的方式进行也是如此。
所以一开始,我的 CosmosDb 看起来像这样:
我试图简单地添加一个新的 class:
public class CaseModel
{
[JsonProperty("_id")]
public string Id { get; set; }
[JsonProperty("vin")]
public string Vin { get; set; }
}
然后按照文档中提到的那样做
using (FeedIterator<Case> iterator = collection.GetItemLinqQueryable<Case>(true).ToFeedIterator())
{
while (iterator.HasMoreResults)
{
foreach (var item in await iterator.ReadNextAsync())
{
var x = item;
}
}
}
这样,代码迭代了许多元素(就像它正在工作一样),
但属性总是 null
- 好像映射不起作用:
然后我尝试了类似的方法
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;
}
}
}
但是这个查询returns没有结果。
我不知道哪里出了问题。
最近几年我在 Azure 上使用 CosmosDb,并在做一些类似的事情。
我唯一觉得奇怪的是,元素被标记为'documents'
最后,我的代码应该是这样的
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;
}
}
}
在调试 windows 中,我看到开头的 3 个步骤(例如使用连接字符串连接,然后获取数据库,然后获取容器)有效。
您正在混合 APIs。您引用的 SDK (Microsoft.Azure.Cosmos) 是 SQL API SDK:https://docs.microsoft.com/azure/cosmos-db/sql/sql-api-sdk-dotnet-standard
您问题中的屏幕截图来自 Mongo API 帐户。
您可以使用带有该 SDK 的 SQL API 帐户,或者使用 C# Mongo driver 与您的 Mongo API 帐户进行交互。
SQL API 帐户使用 id
作为 Ids/document 标识符的 属性,而不是 _id
。