在Microsoft示例中,我看到了两种方法来检查DocumentDb对象是否存在,如Database,DocumentCollection,Document等:
首先是创建一个查询:
Database db = client.CreateDatabaseQuery().Where(x => x.Id == DatabaseId).AsEnumerable().FirstOrDefault();
if (db == null)
{
await client.CreateDatabaseAsync(new Database { Id = DatabaseId });
}
Run Code Online (Sandbox Code Playgroud)
第二个是使用"try catch"块:
try
{
await this.client.ReadDatabaseAsync(UriFactory.CreateDatabaseUri(databaseName));
}
catch (DocumentClientException de)
{
if (de.StatusCode == HttpStatusCode.NotFound)
{
await this.client.CreateDatabaseAsync(new Database { Id = databaseName });
}
else
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
在性能方面执行此过程的正确方法是什么?
您应该使用CreateDatabaseIfNotExistsAsync
DocumentDB SDK中的new 而不是这两种方法,如果您正在尝试这样做的话.
就服务器资源(请求单元)而言,a ReadDocumentAsync
比它稍微轻一些CreateDatabaseQuery
,所以你应该尽可能使用它.
我刚刚在Microsoft提供的示例项目之一中看到了try / catch示例,这让我感到困惑,因为这是完全错误的:您不将try / catch用于控制流。
决不。
这只是错误的代码。新的SDK提供了CreateDatabaseIfNotExistsAsync,我只能希望它不会只是掩盖这种情况。在较旧的lib中,只需使用查询方法,除非您想被任何将要检查代码的人大喊大叫。