Exercício - Criar API para conta e recursos NoSQL
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:
- Criar um banco de dados se ele ainda não existir
- Criar um contêiner se ele ainda não existir
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.
Regresse ao ficheiro .cs Programa.
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" );
Produza o identificador exclusivo do banco de dados.
Console.WriteLine($"[Database created]:\t{database.Id}");
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.
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" );
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 );
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 );
Agora, produza o identificador exclusivo para o contêiner.
Console.WriteLine($"[Container created]:\t{container.Id}");
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.
Usando o Visual Studio Code, crie um novo arquivo chamado Item.cs. Em seguida, abra o arquivo no editor.
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
,categoryId
etype
.public record Item( string Id, string CategoryId, string Type );
Salve o arquivo Item.cs . Feche o arquivo Item.cs .
Crie outro novo arquivo chamado Category.cs. Abra este arquivo no editor agora.
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) );
Salve o arquivo Category.cs . Feche o arquivo Category.cs .
Finalmente, crie um último arquivo chamado Product.cs. Abra este arquivo no editor também.
Crie um novo tipo chamado Produto que herda de Item e adicione algumas novas propriedades:
name
, , ,price
archived
equantity
.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; } };
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.
Execute o aplicativo .NET no terminal
dotnet run
Observe a saída da execução do aplicativo. A saída deve corresponder ao exemplo aqui:
... [Database created]: cosmicworks [Container created]: products