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

时间:2017-03-08 14:49:57

标签: c azure-cosmosdb

在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 });
    }

第二个是使用"尝试捕获"块:

    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;
          }
    }

在性能方面执行此过程的正确方法是什么?

2 个答案:

答案 0 :(得分:8)

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

就服务器资源(请求单位)而言,ReadDocumentAsyncCreateDatabaseQuery稍微轻一些,因此您应尽可能使用它。

答案 1 :(得分:4)

我刚刚看到微软提供的示例项目中的try / catch示例,它让我感到困惑,因为它是完全错误的:你没有使用try / catch来控制流程。

从不。

这只是糟糕的代码。新的SDK提供了CreateDatabaseIfNotExistsAsync,我只能希望不只是隐藏这个狗屎。在较旧的lib中,只需使用查询方法,除非您想要查看将要查看代码的任何人大声喊叫。