Exercício – Criar conta e recursos da conta da API para 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 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:
- Criar um banco de dados se ele ainda não existe
- Criar um contêiner se ele ainda não existe
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.
Retorne ao arquivo Program.cs.
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" );
Gere o identificador exclusivo do banco de dados.
Console.WriteLine($"[Database created]:\t{database.Id}");
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.
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" );
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 );
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 );
Agora, gere o identificador exclusivo do contêiner.
Console.WriteLine($"[Container created]:\t{container.Id}");
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.
No Visual Studio Code, crie um arquivo chamado Item.cs. Em seguida, abra-o no editor.
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
etype
.public record Item( string Id, string CategoryId, string Type );
Salve o arquivo Item.cs. Feche o arquivo Item.cs.
Crie outro arquivo chamado Category.cs. Agora, abra-o no editor.
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) );
Salve o arquivo Category.cs. Feche o arquivo Category.cs.
Por fim, crie um último arquivo chamado Product.cs. Abra-o no editor também.
Crie um tipo chamado Product que herda do 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 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.
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