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
,因为您可能正在尝试链下操作(例如创建容器或在该数据库的某个容器中执行项目级操作)。
在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
,因为您可能正在尝试链下操作(例如创建容器或在该数据库的某个容器中执行项目级操作)。