Упражнение. Создание учетной записи и ресурсов API для NoSQL

Завершено

Теперь вы можете создать различные ресурсы, такие как базы данных, контейнеры и элементы, которые используются в учетной записи Azure Cosmos DB. В этом упражнении создается база данных с именем cosmicworks одного контейнера products. Необходимо убедиться, что код не завершает работу, пытаясь повторно создать контейнер, если запустить это консольное приложение несколько раз.

Сейчас у вас есть несколько основных требований:

  1. Создать базу данных, если она еще не существует.
  2. Создать контейнер, если он еще не существует.

Illustration of icons indicating Azure Cosmos DB resources are created in the cloud.

После выполнения этого упражнения проект создаст все базы данных или контейнеры, которые требуется выполнить.

Создание базы данных

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

  1. Вернитесь к файлу Program.cs .

  2. Создайте или получите новую базу данных путем вызова CreateDatabaseIfNotExistsAsync(String, ThroughputProperties, RequestOptions, CancellationToken). Сохраните результат в переменной под названием database. Обязательно задайте следующие параметры:

    Параметр Значение
    id cosmicworks
    Database database = await client.CreateDatabaseIfNotExistsAsync(
        id: "cosmicworks"
    );
    
  3. Выведите уникальный идентификатор для базы данных.

    Console.WriteLine($"[Database created]:\t{database.Id}");
    
  4. Сохраните файл Program.cs.

Создание контейнера

Здесь вы создадите контейнер с определенным "срезом" общей пропускной способности из базы данных.

  1. Создайте объект свойств для нового контейнера с помощью ContainerProperties типа. Сохраните результат в переменной под названием properties. Обязательно задайте следующие параметры:

    Параметр Значение
    id products
    partitionKeyPath /categoryId
    ContainerProperties properties = new(
        id: "products",
        partitionKeyPath: "/categoryId"
    );
    
  2. Создайте объект пропускной способности автомасштабирования с помощью CreateAutoscaleThroughput(Int32) статического метода. Сохраните результат в переменной под названием throughput. Обязательно задайте следующие параметры:

    Параметр Значение
    autoscaleMaxThroughput 1000
    var throughput = ThroughputProperties.CreateAutoscaleThroughput(
        autoscaleMaxThroughput: 1000
    );
    
  3. Создайте или получите новый контейнер путем вызова CreateContainerIfNotExistsAsync(String, String, Nullable<Int32>, RequestOptions, CancellationToken). Сохраните результат в переменной под названием container. Обязательно задайте следующие параметры:

    Container container = await database.CreateContainerIfNotExistsAsync(
        containerProperties: properties,
        throughputProperties: throughput
    );
    
  4. Теперь выведите уникальный идентификатор для контейнера.

    Console.WriteLine($"[Container created]:\t{container.Id}");
    
  5. Сохраните файл Program.cs.

Создание типов записей для элементов

Данные C# можно представить с помощью различных типов, включая классы, структуры и записи. Для этого пакета SDK записи полезны, так как по умолчанию они являются неизменяемыми. Вы по-прежнему можете добавить код для создания измененной копии записи, если это необходимо. Записи также имеют простой синтаксис для чтения и быстро создаются только с несколькими строками кода. В этом разделе вы создадите базовый тип для всех элементов и отдельных типов для каждого типа элемента.

  1. С помощью Visual Studio Code создайте файл с именем Item.cs. Затем откройте файл в редакторе.

  2. Создайте базовый тип Item записи, который содержит три свойства, которые необходимо использовать во всех элементах этого контейнера: id, categoryIdи type.

    public record Item(
        string Id,
        string CategoryId,
        string Type
    );
    
  3. Сохраните файл Item.cs. Закройте файл Item.cs.

  4. Создайте другой файл с именем Category.cs. Откройте этот файл в редакторе.

  5. Создайте тип под названием Category, который наследуется от типа Item. Убедитесь, что тип передает свои значения в базовую реализацию и задает переменную type, чтобы вывести имя типа Category.

    public record Category(
        string Id,
        string CategoryId
    ) : Item(
        Id,
        CategoryId,
        nameof(Category)
    );
    
  6. Сохраните файл Category.cs. Закройте файл Category.cs.

  7. Наконец, создайте один последний файл с именем Product.cs. Откройте этот файл в редакторе.

  8. Создайте новый тип под названием Product, который наследуется от Item и добавляет несколько новых свойств: name, price, archived и quantity.

    public record Product(
        string Id,
        string CategoryId
    ) : Item(
        Id,
        CategoryId,
        nameof(Product)
    )
    {
        public string Name { get; init; } = default!;
        public decimal Price { get; init; }
        public bool Archived { get; init; }
        public int Quantity { get; init; }
    };
    
  9. Сохраните файл Product.cs. Закройте файл Product.cs.

Проверьте свою работу

Теперь приложение создает базу данных и контейнер. Методы, используемые для создания этих ресурсов, достаточно устойчивые для многократного запуска без исключения. Здесь вы запустите приложение и проверка выходные данные для уникальных идентификаторов обоих ресурсов.

  1. Запустите приложение .NET в терминале.

    dotnet run
    
  2. Просмотрите выходные данные запуска приложения. Выходные данные должны соответствовать примеру:

    ...
    [Database created]:     cosmicworks
    [Container created]:    products