Azure cosmosdb Cosmos数据库仿真器:“';分析存储';不是当前有效负载中的有效属性;当设置AnalyticalStoreTimeToLiveInSeconds时

Azure cosmosdb Cosmos数据库仿真器:“';分析存储';不是当前有效负载中的有效属性;当设置AnalyticalStoreTimeToLiveInSeconds时,azure-cosmosdb,Azure Cosmosdb,将.NET标准SDK与Emulator(v2.11.5.0)一起使用,并尝试使用ContainerProperties对象上设置的AnalyticalStoreTimeToLiveInSeconds创建容器时,会引发以下异常: Microsoft.Azure.Cosmos.CosmosException:“响应状态代码不表示成功:BadRequest(400);子状态:0;活动ID:c4b8a5d2-29e3-4720-918c-123eb10da0a4;原因:(消息:{“Errors”:[“输

将.NET标准SDK与Emulator(v2.11.5.0)一起使用,并尝试使用
ContainerProperties
对象上设置的
AnalyticalStoreTimeToLiveInSeconds
创建容器时,会引发以下异常:

Microsoft.Azure.Cosmos.CosmosException:“响应状态代码不表示成功:BadRequest(400);子状态:0;活动ID:c4b8a5d2-29e3-4720-918c-123eb10da0a4;原因:(消息:{“Errors”:[“输入内容无效-'analyticalStorageTtl'在当前有效负载中不是有效属性。”]}

ActivityId:c4b8a5d2-29e3-4720-918c-123eb10da0a4,请求URI:/apps/DocDbApp/services/DocDbMaster0/partitions/780e44f4-38c8-11e6-8106-8cdcd42c33be/replications/1p/,RequestStats:,SDK:Microsoft.Azure.Documents.Common/2.11.0,请参阅CosmosDiagnostics,Windows/10.0.18362 cosmos netstandard SDK/3.11.4);'

使用云托管的CosmosDB时没有错误,只有在使用模拟器时才有错误。互联网搜索对此一无所获,有人有什么想法吗

要复制的代码 Program.cs:
使用System.Threading.Tasks;
使用Microsoft.Azure.Cosmos;
名称空间控制台EApp2
{
公共课程
{
公共静态异步任务主(字符串[]args)
{
常量字符串databaseName=“TestDatabase”;
常量字符串containerName=“TestContainer”;
var accountEndpoint=”https://localhost:8081";
var authKey=“C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw=”;
var cosmosClient=新的cosmosClient(accountEndpoint,authKey);
等待cosmosClient.CreateDatabaseIfNoteExistsAsync(databaseName,400);
var database=cosmosClient.GetDatabase(databaseName);
wait database.createContainerSync(新的ContainerProperties)
{
Id=容器名称,
PartitionKeyPath=“/id”,
AnalyticalStoreTimeToLiveUnseconds=0//删除此行会使异常消失
});
}
}
}
ConsoleApp2.csproj

Exe
netcoreapp3.1

根据Mark Brown的评论,Azure Cosmos DB Emulator不支持分析存储,因此不允许使用该设置创建容器,因此发生此错误

此外,Microsoft并不打算将SDK用于为DevOps场景创建/更新容器,因此不打算在此处更改emulator的行为

对于我们的项目,开发人员使用模拟器在他们的机器上进行本地测试,作为一个短期解决方案,我们使用应用程序设置来控制这一点


从长远来看,我们希望通过脚本将容器创建作为部署管道的一部分进行处理。

您不能在此模拟器中进行任何分析。Cosmos emulator中不支持分析存储。它只模拟Cosmos.Fair的OLTP存储,但为了避免用户根据是否使用模拟器定制容器创建代码,与其像现在一样抛出异常,不如简单地忽略属性,这不是更好吗?emulator是为数据平面操作的开发/测试而设计的,而不是DevOps。如果要创建新容器,则应使用ARM模板和/或PS/CLI,并通过Azure DevOps进行部署,而不是在SDK中进行部署。