Быстрое начало: Использование Azure Cosmos DB для таблицы с пакетом SDK Azure для .NET

Important

Вы ищете решение для баз данных для крупномасштабных сценариев с соглашением об уровне обслуживания (SLA) с доступностью 99,999%, мгновенным автомасштабированием и автоматическим переключением на резервные ресурсы в нескольких регионах? Рассмотрим Azure Cosmos DB для NoSQL.

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

Справочная документация по API | Исходный код библиотеки | Пакет (NuGet) | Azure Developer CLI

Предпосылки

  • Azure Developer CLI (Интерфейс командной строки для разработчиков Azure)
  • 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-table-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 в качестве Azure.Data.Tables пакета.

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

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

    dotnet add package Azure.Data.Tables
    
  3. Откройте и просмотрите файл src/web/Microsoft.Samples.Cosmos.Table.Quickstart.Web.csproj , чтобы проверить наличие Azure.Data.Tables записи.

Импорт библиотек

Импортируйте пространства имен Azure.Identity и Azure.Data.Tables в код приложения.

using Azure.Identity;

using Azure.Data.Tables;

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

Name Description
TableServiceClient Этот класс является основным клиентским классом и используется для управления метаданными или базами данных на уровне учетной записи.
TableClient Этот класс представляет клиента для таблицы в учётной записи.

Примеры кода

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

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

В этом примере создается новый экземпляр TableServiceClient класса.

DefaultAzureCredential credential = new();

TableServiceClient serviceClient = new(
    endpoint: new Uri("<azure-cosmos-db-table-account-endpoint>"),
    credential
);

Забронировать стол

В этом примере создается экземпляр класса TableClient с помощью метода GetTableClient класса TableServiceClient.

TableClient client = serviceClient.GetTableClient(
    tableName: "<azure-cosmos-db-table-name>"
);

Создайте сущность

Самый простой способ создать сущность в таблице — создать класс, реализующий ITableEntity интерфейс. Затем вы можете добавить свои собственные свойства в класс, чтобы заполнить столбцы данных в этой строке таблицы.

public record Product : ITableEntity
{
    public required string RowKey { get; set; }

    public required string PartitionKey { get; set; }

    public required string Name { get; set; }

    public required int Quantity { get; set; }

    public required decimal Price { get; set; }

    public required bool Clearance { get; set; }

    public ETag ETag { get; set; } = ETag.All;

    public DateTimeOffset? Timestamp { get; set; }
};

Создайте сущность в таблице с помощью Product класса путем вызова TableClient.AddEntityAsync<T>.

Product entity = new()
{
    RowKey = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    PartitionKey = "gear-surf-surfboards",
    Name = "Surfboard",
    Quantity = 10,
    Price = 300.00m,
    Clearance = true
};

Response response = await client.UpsertEntityAsync<Product>(
    entity: entity,
    mode: TableUpdateMode.Replace
);

Получите сущность

Вы можете получить определенную сущность из таблицы с помощью TableClient.GetEntityAsync<T> метода. Укажите partitionKey и rowKey в качестве параметров, чтобы определить правильную строку для выполнения быстрого побайтового чтения этой сущности.

Response<Product> response = await client.GetEntityAsync<Product>(
    rowKey: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    partitionKey: "gear-surf-surfboards"
);

Запрос сущностей

После вставки сущности можно также запустить запрос, чтобы получить все сущности, соответствующие определенному фильтру TableClient.Query<T> , с помощью метода. В этом примере продукты фильтруются по категориям с помощью синтаксиса LINQ, который является преимуществом использования типизированных ITableEntity моделей, таких как Product класс.

string category = "gear-surf-surfboards";

AsyncPageable<Product> results = client.QueryAsync<Product>(
    product => product.PartitionKey == category
);

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

List<Product> entities = new();
await foreach (Product product in results)
{
    entities.Add(product);
}

Очистите ресурсы

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

azd down