Database.ReadAsync() 有什么用?

What is Database.ReadAsync() for?

samples for the Cosmos DB SQL API, there are a couple of uses of 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,因为您可能正在尝试链下操作(例如创建容器或在该数据库的某个容器中执行项目级操作)。