azure-cosmosdb - Database.ReadAsync() 有什么用?
问题描述
在Cosmos DB SQL API 的示例中, Database.ReadAsync()有几个用法,它们似乎没有做任何有用的事情。该方法文档中的第二条注释并没有真正表明它可能用于什么。
在这些情况下使用它的原因是什么?您通常什么时候使用它?
ChangeFeed/Program.cs#L475显示获取数据库然后调用 ReadAsync 以获取对数据库的另一个引用
database = await client.GetDatabase(databaseId).ReadAsync();
await database.DeleteAsync();
这似乎在功能上与
database = client.GetDatabase(databaseId);
await database.DeleteAsync();
如果找不到数据库,则抛出相同的异常。
和DatabaseManagement/Program.cs#L80-L83
DatabaseResponse readResponse = await database.ReadAsync();
Console.WriteLine($"\n3. Read a database: {readResponse.Resource.Id}");
await readResponse.Database.CreateContainerAsync("testContainer", "/pk");
这似乎相当于:
Console.WriteLine($"\n3. Read a database: {database.Id}");
await database.CreateContainerAsync("testContainer", "/pk");
产生与以前相同的输出并创建容器。
解决方案
您是正确的,这些样品可能需要抛光,主要区别是:
- GetDatabase 只是获取一个代理对象,并不代表数据库确实存在。如果您尝试对不存在的数据库(例如 CreateContainer)执行操作,它可能会失败并返回 404。
- ReadAsync 将读取
DatabaseProperties
并允许您从那里获取任何信息,并且如果数据库实际存在,也会成功。这是否保证如果我立即调用 CreateContainer 它将成功?不,因为数据库可能在中间被删除了。
因此,总而言之,如果您想获取其中的任何一个,DatabaseProperties
或者出于某种原因想要验证数据库是否存在,ReadAsync 是很好的选择。
最常见的场景只是使用GetDatabase
,因为您可能正在尝试沿链进行操作(例如在该数据库的某个容器中创建容器或执行项目级操作)。
推荐阅读
- typescript - 打字稿:如何从可能是也可能不是数组元素的泛型中推断类型
- r - 如何有选择地从数据框中的元素中删除字符?
- volttron - 如何在 Volttron-GS 中设置 ILC 代理?
- file - Applescript 选择文件夹中的最后一个文件(按名称升序列出)
- c# - 如何在 confuserex 中使用密码混淆符号名称?
- powershell - 管道中的具体类型输出变量无效的 JObject
- css - 如何使每个徽标在视觉上都具有相同的大小?
- javascript - 模拟路由器模块笑话
- python - 如果需要进行矩阵乘法,如何避免循环?
- python - 模块语法高亮