Exercício – Criar conta e recursos da conta da API para NoSQL

Concluído

Agora você pode criar os vários recursos, como bancos de dados, contêineres e itens, que você usa em sua conta do Azure Cosmos DB. Para este exercício, você cria um banco de dados chamado cosmicworks com um único contêiner chamado products. Você precisa garantir que o código não falhe ao tentar recriar um contêiner se você executar esse aplicativo de console várias vezes.

No momento, você tem alguns requisitos principais:

  1. Criar um banco de dados se ele ainda não existe
  2. Criar um contêiner se ele ainda não existe

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

Depois de concluir este exercício, o projeto criará os bancos de dados ou contêineres necessários para execução.

Criar um banco de dados

O SDK contém métodos úteis que criam um recurso se ele ainda não existir. Usando esses métodos, você pode executar o aplicativo várias vezes sem se preocupar com exceções geradas por conflitos. Aqui, você cria um banco de dados.

  1. Retorne ao arquivo Program.cs.

  2. Criar ou obter um novo banco de dados chamando CreateDatabaseIfNotExistsAsync(String, ThroughputProperties, RequestOptions, CancellationToken). Armazene o resultado em uma variável chamada database. Defina estes parâmetros:

    Parâmetro Valor
    id cosmicworks
    Database database = await client.CreateDatabaseIfNotExistsAsync(
        id: "cosmicworks"
    );
    
  3. Gere o identificador exclusivo do banco de dados.

    Console.WriteLine($"[Database created]:\t{database.Id}");
    
  4. Salve o arquivo Program.cs.

Criar um contêiner

Aqui, você cria um contêiner com uma "fatia" específica da taxa de transferência compartilhada do banco de dados.

  1. Crie um objeto de propriedades para um novo contêiner usando o tipo ContainerProperties. Armazene o resultado em uma variável chamada properties. Defina estes parâmetros:

    Parâmetro Valor
    id products
    partitionKeyPath /categoryId
    ContainerProperties properties = new(
        id: "products",
        partitionKeyPath: "/categoryId"
    );
    
  2. Crie um objeto de taxa de transferência de dimensionamento automático usando o método estático CreateAutoscaleThroughput(Int32). Armazene o resultado em uma variável chamada throughput. Defina estes parâmetros:

    Parâmetro Valor
    autoscaleMaxThroughput 1000
    var throughput = ThroughputProperties.CreateAutoscaleThroughput(
        autoscaleMaxThroughput: 1000
    );
    
  3. Criar ou obter um novo contêiner chamando CreateContainerIfNotExistsAsync(String, String, Nullable<Int32>, RequestOptions, CancellationToken). Armazene o resultado em uma variável chamada container. Defina estes parâmetros:

    Container container = await database.CreateContainerIfNotExistsAsync(
        containerProperties: properties,
        throughputProperties: throughput
    );
    
  4. Agora, gere o identificador exclusivo do contêiner.

    Console.WriteLine($"[Container created]:\t{container.Id}");
    
  5. Salve o arquivo Program.cs.

Criar tipos de registro para itens

Os dados em C# podem ser representados usando vários tipos, incluindo classes, structs e registros. Nesse SDK, os registros são úteis porque são imutáveis por padrão. Você ainda pode adicionar código para criar uma cópia modificada de um registro, se necessário. Os registros também têm uma sintaxe de leitura fácil e são rápidos de criar com apenas algumas linhas de código. Nesta seção, você cria um tipo base para todos os itens e tipos individuais para cada "tipo" de item.

  1. No Visual Studio Code, crie um arquivo chamado Item.cs. Em seguida, abra-o no editor.

  2. Crie um tipo de registro base chamado Item que contenha as três propriedades que você deseja usar em todos os itens desse contêiner: id, categoryId e type.

    public record Item(
        string Id,
        string CategoryId,
        string Type
    );
    
  3. Salve o arquivo Item.cs. Feche o arquivo Item.cs.

  4. Crie outro arquivo chamado Category.cs. Agora, abra-o no editor.

  5. Crie um tipo chamado Category que herde do tipo Item. Verifique se o tipo passa os valores dele para a implementação base e defina a variável type para gerar o nome do tipo Category.

    public record Category(
        string Id,
        string CategoryId
    ) : Item(
        Id,
        CategoryId,
        nameof(Category)
    );
    
  6. Salve o arquivo Category.cs. Feche o arquivo Category.cs.

  7. Por fim, crie um último arquivo chamado Product.cs. Abra-o no editor também.

  8. Crie um tipo chamado Product que herda do Item e adicione algumas novas propriedades: name, price, archived e 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. Salve o arquivo Product.cs. Feche o arquivo Product.cs.

Verificar seu trabalho

Seu aplicativo agora cria um banco de dados e um contêiner. Os métodos usados para criar esses recursos são resilientes o suficiente para serem executados várias vezes sem causar uma exceção. Aqui, você executa o aplicativo e verificará a saída dos identificadores exclusivos dos dois recursos.

  1. Execute o aplicativo .NET no terminal

    dotnet run
    
  2. Observe a saída da execução do aplicativo. A saída deve corresponder ao exemplo aqui:

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