快速入門:適用於 NET 的 Azure Cosmos DB for NoSQL 程式庫

適用於:NoSQL

開始使用適用於 .NET 的 Azure Cosmos DB for NoSQL 用戶端程式庫來查詢容器中的資料,並對各個項目執行常見作業。 請依照以下步驟,使用 Azure Developer CLI 將基本解決方案部署到您的環境。

API 參考文件 | 程式庫原始程式碼 | 套件 (NuGet) | Azure Developer CLI

必要條件

設定

將這個專案的開發容器部署到您的環境。 然後使用 Azure Developer CLI (azd) 來建立 Azure Cosmos DB for NoSQL 帳戶,並部署容器化應用程式範例。 應用程式範例使用用戶端程式庫管理、建立、讀取和查詢樣本資料。

在 GitHub Codespaces 中開啟

在開發容器中開啟

重要

GitHub 帳戶的免費權利包括儲存體和核心時數。 如需詳細資訊,請參閱 GitHub 帳戶包含的儲存體和核心時數

  1. 在專案的根目錄中開啟終端。

  2. 使用 azd auth login 以向 Azure Developer CLI 進行驗證。 依照工具指定的步驟,使用您慣用的 Azure 認證向 CLI 進行驗證。

    azd auth login
    
  3. 使用 azd init 來初始化專案。

    azd init
    
  4. 在初始化期間,請設定唯一的環境名稱。

    提示

    環境名稱也將是目標資源群組名稱。 在這個快速入門中,請考慮使用 msdocs-cosmos-db-

  5. 使用 azd up部署 Azure Cosmos DB 帳戶。 Bicep 範本也會部署範例 Web 應用程式。

    azd up
    
  6. 在佈建流程期間,請選取您的訂用帳戶和所需位置。 等候佈建程序完成。 此流程「大約需要五分鐘」的時間。

  7. Azure 資源佈建完成後,輸出將包含正在執行的 Web 應用程式的 URL。

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. 請使用主控台中的 URL,以在瀏覽器中導覽至您的 Web 應用程式。 觀察執行中應用程式的輸出。

    執行中 Web 應用程式的螢幕快照。

安裝用戶端程式庫

用戶端程式庫可透過 NuGet 以 Microsoft.Azure.Cosmos 套件形式提供。

  1. 開啟終端機,然後導覽至 /src/web 資料夾。

    cd ./src/web
    
  2. 如果尚未安裝,則請使用 dotnet add package 來安裝 Microsoft.Azure.Cosmos 套件。

    dotnet add package Microsoft.Azure.Cosmos
    
  3. 也請安裝 Azure.Identity 套件 (如果尚未安裝)。

    dotnet add package Azure.Identity
    
  4. 開啟並檢閱 src/web/Cosmos.Samples.NoSQL.Quickstart.Web.csproj 檔案,以驗證 Microsoft.Azure.CosmosAzure.Identity 項目都存在。

物件模型

名稱 描述
CosmosClient 此類別是主要用戶端類別,並且用來管理全帳戶中繼資料或資料庫。
Database 此類別代表帳戶內的資料庫。
Container 此類別主要用來對容器或容器內所儲存的項目執行讀取、更新和刪除作業。
PartitionKey 此類別代表邏輯分割區索引鍵。 許多常見的作業和查詢都需要此類別。

程式碼範例

範本中的程式碼範例使用 cosmicworks 資料庫和 products 容器。 products 容器包含每個產品的名稱、類別、數量、唯一識別碼和銷售旗標這類詳細資料。 容器使用 /category 屬性作為邏輯分割區索引鍵。

驗證用戶端

大多數 Azure 服務的應用程式要求都需要您授權。 使用 DefaultAzureCredential 型別作為慣用方式,以實作應用程式與 Azure Cosmos DB for NoSQL 之間的無密碼連線。 DefaultAzureCredential 支援多個驗證方法,並在執行階段判斷應該使用哪個方法。

重要

您也可以直接使用密碼、連接字串或其他認證,來授權 Azure 服務要求。 不過,應該謹慎使用此方法。 開發人員應盡力不讓祕密在不安全的位置曝光。 任何取得密碼或祕密金鑰存取權的人員,都可以對資料庫伺服器進行驗證。 DefaultAzureCredential 提供更新版管理和安全性比帳戶金鑰更具優勢,可進行無密碼驗證,完全沒有儲存金鑰需面臨的風險。

此範例會建立 CosmosClient 類別的新執行個體,並使用 DefaultAzureCredential 執行個體來進行驗證。

CosmosClient client = new(
    accountEndpoint: builder.Configuration["AZURE_COSMOS_DB_NOSQL_ENDPOINT"]!,
    tokenCredential: new DefaultAzureCredential()
);

取得資料庫

使用 client.GetDatabase 來擷取名為 cosmicworks 的現有資料庫。

Database database = client.GetDatabase("cosmicworks");

取得容器

使用 database.GetContainer 來擷取現有 products 容器。

Container container = database.GetContainer("products");

建立項目

建置 C# 記錄類型,而此類型具有所有您想要序列化成 JSON 的成員。 在此範例中,此類型具有唯一識別碼,以及類別、名稱、數量、價格和銷售的欄位。

public record Product(
    string id,
    string category,
    string name,
    int quantity,
    decimal price,
    bool clearance
);

使用 container.UpsertItem,以在容器中建立項目。 此方法會有效地 "upserts" 可取代項目 (如果已存在) 的項目。

Product item = new(
    id: "68719518391",
    category: "gear-surf-surfboards",
    name: "Yamba Surfboard",
    quantity: 12,
    price: 850.00m,
    clearance: false
);

ItemResponse<Product> response = await container.UpsertItemAsync<Product>(
    item: item,
    partitionKey: new PartitionKey("gear-surf-surfboards")
);

讀取項目

使用唯一識別碼 (id) 和分割區索引鍵欄位,來執行點讀取作業。 使用 container.ReadItem 有效率地擷取特定項目。

ItemResponse<Product> response = await container.ReadItemAsync<Product>(
    id: "68719518391",
    partitionKey: new PartitionKey("gear-surf-surfboards")
);

查詢項目

使用 container.GetItemQueryIterator,以對容器中的多個項目執行查詢。 使用此參數化查詢,來尋找所指定類別內的所有項目:

SELECT * FROM products p WHERE p.category = @category
var query = new QueryDefinition(
    query: "SELECT * FROM products p WHERE p.category = @category"
)
    .WithParameter("@category", "gear-surf-surfboards");

using FeedIterator<Product> feed = container.GetItemQueryIterator<Product>(
    queryDefinition: query
);

使用 feed.ReadNextAsync 以重複查看結果的每個頁面,以剖析已分頁的查詢結果。 使用 feed.HasMoreResults 來判斷每個迴圈開頭是否留下任何結果。

List<Product> items = new();
double requestCharge = 0d;
while (feed.HasMoreResults)
{
    FeedResponse<Product> response = await feed.ReadNextAsync();
    foreach (Product item in response)
    {
        items.Add(item);
    }
    requestCharge += response.RequestCharge;
}

清除資源

當您不再需要範例應用程式或資源時,請移除對應的部署和所有資源。

azd down

在 GitHub Codespaces 中,刪除執行中程式碼空間,以最大化您的儲存體和核心權利。

後續步驟