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

Str*_*Lev 7 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 });
    }
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)

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

Ara*_* R. 9

您应该使用CreateDatabaseIfNotExistsAsyncDocumentDB SDK中的new 而不是这两种方法,如果您正在尝试这样做的话.

就服务器资源(请求单元)而言,a ReadDocumentAsync比它稍微轻一些CreateDatabaseQuery,所以你应该尽可能使用它.


Mic*_* Ja 6

我刚刚在Microsoft提供的示例项目之一中看到了try / catch示例,这让我感到困惑,因为这是完全错误的:您不将try / catch用于控制流。

决不。

这只是错误的代码。新的SDK提供了CreateDatabaseIfNotExistsAsync,我只能希望它不会只是掩盖这种情况。在较旧的lib中,只需使用查询方法,除非您想被任何将要检查代码的人大喊大叫。