Exercício - Criar API para conta e recursos 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 nomeado cosmicworks com um único contêiner chamado products. Você precisa ter certeza de que o código não falha ao tentar recriar um contêiner se você executar esse aplicativo de console várias vezes.

Neste momento, você tem alguns requisitos principais:

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

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

Depois de concluir este exercício, seu projeto criará todos os bancos de dados ou contêineres necessários para ser executado.

Criar uma base de dados

O SDK contém métodos úteis que criam um novo 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. Regresse ao ficheiro .cs Programa.

  2. Crie, ou obtenha, um novo banco de dados chamando CreateDatabaseIfNotExistsAsync(String, ThroughputProperties, RequestOptions, CancellationToken). Armazene o resultado em uma variável chamada database. Certifique-se de definir estes parâmetros:

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

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

Criar um contentor

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 ContainerProperties tipo. Armazene o resultado em uma variável chamada properties. Certifique-se de definir 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 escala automática usando o CreateAutoscaleThroughput(Int32) método estático. Armazene o resultado em uma variável chamada throughput. Certifique-se de definir estes parâmetros:

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

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

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

Criar tipos de registro para itens

Os dados C# podem ser representados usando vários tipos, incluindo classes, structs e registros. Para este 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 fácil de ler 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. Usando o Visual Studio Code, crie um novo arquivo chamado Item.cs. Em seguida, abra o arquivo no editor.

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

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

  4. Crie outro novo arquivo chamado Category.cs. Abra este arquivo no editor agora.

  5. Crie um novo tipo chamado Category que herda do tipo Item . Verifique se o tipo passa seus valores 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. Finalmente, crie um último arquivo chamado Product.cs. Abra este arquivo no editor também.

  8. Crie um novo tipo chamado Produto que herda de Item e adicione algumas novas propriedades: name, , , pricearchivede 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 .cs produto. Feche o arquivo .cs produto.

Verifique o 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 verifica a saída para os identificadores exclusivos de ambos os 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