检查 DocumentDB 对象是否存在的正确方法

Correct way to check if DocumentDB object exists

在 Microsoft 示例中,我看到了两种检查 DocumentDb 对象(如数据库、DocumentCollection、Document 等)是否存在的方法:

首先是创建查询:

Database db = client.CreateDatabaseQuery().Where(x => x.Id == DatabaseId).AsEnumerable().FirstOrDefault();
if (db == null)
    {
        await client.CreateDatabaseAsync(new Database { Id = DatabaseId });
    }

第二个是使用"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;
          }
    }

就性能而言,执行此过程的正确方法是什么?

您应该使用 DocumentDB SDK 中的新 CreateDatabaseIfNotExistsAsync 而不是这两种方法,如果您正在尝试这样做的话。

在服务器资源(请求单位)方面,ReadDocumentAsyncCreateDatabaseQuery 稍微轻量级,因此您应该尽可能使用它。

我刚刚在 Microsoft 提供的示例项目之一中看到了 try/catch 示例,这让我感到困惑,因为它显然是错误的:您不使用 try/catch 来控制流程.

从来没有。

这只是错误的代码。新的 SDK 提供了 CreateDatabaseIfNotExistsAsync,我只希望它不会只是隐藏这个狗屎。在较旧的库中,只需使用查询方法,除非你想被审查代码的人大喊大叫。