Поделиться через


Краткое руководство. Использование Azure Cosmos DB для NoSQL с пакетом SDK Azure для .NET

В этом кратком руководстве описано, как развернуть базовое приложение Azure Cosmos DB для таблиц с помощью пакета SDK Azure для .NET. Azure Cosmos DB для таблицы — это хранилище данных без схемы, позволяющее приложениям хранить структурированные данные таблицы в облаке. Вы узнаете, как создавать таблицы, строки и выполнять основные задачи в ресурсе Azure Cosmos DB с помощью пакета SDK Azure для .NET.

Пакет исходного кода библиотеки исходного кода | библиотеки | API (NuGet) | Azure Developer CLI

Необходимые компоненты

  • Azure Developer CLI
  • Docker Desktop
  • .NET 9.0

Если у вас нет учетной записи Azure, создайте бесплатную учетную запись, прежде чем начинать работу.

Инициализация проекта

Используйте интерфейс командной строки разработчика Azure (azd) для создания учетной записи Azure Cosmos DB для таблицы и развертывания контейнерного примера приложения. Пример приложения использует клиентская библиотека для управления, создания, чтения и запроса примеров данных.

  1. Откройте терминал в пустом каталоге.

  2. Если вы еще не прошли проверку подлинности, выполните проверку подлинности в интерфейсе командной строки разработчика Azure с помощью azd auth login. Выполните действия, указанные средством для проверки подлинности в CLI с помощью предпочитаемых учетных данных Azure.

    azd auth login
    
  3. Используется azd init для инициализации проекта.

    azd init --template cosmos-db-nosql-dotnet-quickstart
    
  4. Во время инициализации настройте уникальное имя среды.

  5. Разверните учетную запись Azure Cosmos DB с помощью azd up. Шаблоны Bicep также развертывают пример веб-приложения.

    azd up
    
  6. В процессе подготовки выберите подписку, требуемое расположение и целевую группу ресурсов. Дождитесь завершения процесса подготовки. Процесс может занять около пяти минут.

  7. После завершения подготовки ресурсов Azure в выходные данные будет включен 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-адрес консоли для перехода к веб-приложению в браузере. Просмотрите выходные данные запущенного приложения.

Снимок экрана: работающее веб-приложение.

Установка клиентской библиотеки

Клиентская библиотека доступна через NuGet в качестве Microsoft.Azure.Cosmos пакета.

  1. Откройте терминал и перейдите в папку /src/web .

    cd ./src/web
    
  2. Если пакет еще не установлен, установите Microsoft.Azure.Cosmos его с помощью dotnet add package.

    dotnet add package Microsoft.Azure.Cosmos --version 3.*
    
  3. Кроме того, установите Azure.Identity пакет, если он еще не установлен.

    dotnet add package Azure.Identity --version 1.12.*
    
  4. Откройте и просмотрите файл src/web/Cosmos.Samples.NoSQL.Quickstart.Web.csproj , чтобы проверить наличие Microsoft.Azure.Cosmos и Azure.Identity записи.

Объектная модель

Имя Описание
CosmosClient Этот класс является основным клиентским классом и используется для управления метаданными или базами данных на уровне учетной записи.
Database Этот класс представляет базу данных в учетной записи.
Container Этот класс в основном используется для выполнения операций чтения, обновления и удаления в контейнере или элементов, хранящихся в контейнере.
PartitionKey Этот класс представляет ключ логического раздела. Этот класс необходим для многих распространенных операций и запросов.

Примеры кода

Пример кода в шаблоне использует базу данных с именем cosmicworks и контейнером products. Контейнер products содержит такие сведения, как имя, категория, количество, уникальный идентификатор и флаг продажи для каждого продукта. Контейнер использует /category свойство в качестве ключа логического раздела.

аутентификация клиента;

В этом примере создается новый экземпляр CosmosClient класса и выполняется проверка подлинности с помощью экземпляра DefaultAzureCredential .

DefaultAzureCredential credential = new();

CosmosClient client = new(
    accountEndpoint: "<azure-cosmos-db-nosql-account-endpoint>",
    tokenCredential: new DefaultAzureCredential()
);

Получение базы данных

Используется client.GetDatabase для извлечения существующей базы данных с именем cosmicworks.

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

Получение контейнера

Получение существующего products контейнера с помощью database.GetContainer.

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: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    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: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    partitionKey: new PartitionKey("gear-surf-surfboards")
);

Элементы запроса

Выполнение запроса по нескольким элементам в контейнере с помощью container.GetItemQueryIterator. Найдите все элементы в указанной категории с помощью этого параметризованного запроса:

SELECT * FROM products p WHERE p.category = @category
string query = "SELECT * FROM products p WHERE p.category = @category"

var query = new QueryDefinition(query)
  .WithParameter("@category", "gear-surf-surfboards");

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

Анализ результатов запроса с разбивкой на страницы путем цикла по каждой странице результатов с помощью feed.ReadNextAsync. Используется feed.HasMoreResults для определения наличия каких-либо результатов в начале каждого цикла.

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

Очистка ресурсов

Если вам больше не нужен пример приложения или ресурсов, удалите соответствующее развертывание и все ресурсы.

azd down