Ejercicio: Creación de una cuenta y recursos de API para NoSQL
Ahora puede crear los distintos recursos, como bases de datos, contenedores y elementos, que se usan en la cuenta de Azure Cosmos DB. En este ejercicio se crea una base de datos denominada cosmicworks
con un único contenedor denominado products
. Debe asegurarse de que el código no se bloquee al intentar volver a crear un contenedor si ejecuta esta aplicación de consola varias veces.
Ahora mismo, usted tiene dos requisitos clave:
- Creación de una base de datos si aún no existe
- Creación de un contenedor si aún no existe
Después de completar este ejercicio, el proyecto creará las bases de datos o los contenedores que necesita para ejecutarse.
Crear una base de datos
El SDK contiene métodos útiles que crean un recurso si todavía no existe. Mediante el uso de estos métodos, puede ejecutar la aplicación varias veces sin preocuparse por las excepciones generadas por conflictos. Aquí, se crea una base de datos.
Vuelva al archivo Program.cs.
Cree u obtenga una nueva base de datos mediante una llamada a CreateDatabaseIfNotExistsAsync(String, ThroughputProperties, RequestOptions, CancellationToken). Almacene el resultado en una variable denominada
database
. Asegúrese de establecer estos parámetros:Parámetro Valor id cosmicworks
Database database = await client.CreateDatabaseIfNotExistsAsync( id: "cosmicworks" );
Genere el identificador único de la base de datos.
Console.WriteLine($"[Database created]:\t{database.Id}");
Guarde el archivo Program.cs.
Crear un contenedor
Aquí, se crea un contenedor con un "segmento" específico del rendimiento compartido de la base de datos.
Cree un objeto de propiedades para un nuevo contenedor mediante el tipo ContainerProperties. Almacene el resultado en una variable denominada
properties
. Asegúrese de establecer estos parámetros:Parámetro Valor id products
partitionKeyPath /categoryId
ContainerProperties properties = new( id: "products", partitionKeyPath: "/categoryId" );
Cree un objeto de rendimiento de escalabilidad automática mediante el método estático CreateAutoscaleThroughput(Int32). Almacene el resultado en una variable denominada
throughput
. Asegúrese de establecer estos parámetros:Parámetro Valor autoscaleMaxThroughput 1000
var throughput = ThroughputProperties.CreateAutoscaleThroughput( autoscaleMaxThroughput: 1000 );
Cree o obtenga un nuevo contenedor mediante una llamada a CreateContainerIfNotExistsAsync(String, String, Nullable<Int32>, RequestOptions, CancellationToken). Almacene el resultado en una variable denominada
container
. Asegúrese de establecer estos parámetros:Container container = await database.CreateContainerIfNotExistsAsync( containerProperties: properties, throughputProperties: throughput );
Genere el identificador único del contenedor.
Console.WriteLine($"[Container created]:\t{container.Id}");
Guarde el archivo Program.cs.
Creación tipos de registro para elementos
Los datos de C# se pueden representar mediante varios tipos, como clases, estructuras y registros. Para este SDK, los registros son útiles porque son inmutables de forma predeterminada. Aun así, puede agregar código para crear una copia modificada de un registro si es necesario. Los registros también tienen una sintaxis fácil de leer y son rápidos de crear con solo unas pocas líneas de código. En esta sección, se crea un tipo base para todos los elementos y tipos individuales para cada elemento de distinta clase.
En Visual Studio Code, cree un archivo denominado Item.cs. A continuación, abra el archivo en el editor.
Cree un tipo de registro base denominado
Item
que contenga las tres propiedades que desea usar en todos los elementos de este contenedor:id
,categoryId
ytype
.public record Item( string Id, string CategoryId, string Type );
Guarde el archivo Item.cs. Cierre el archivo Item.cs.
Cree otro archivo denominado Category.cs. Abra este archivo en el editor ahora.
Cree un nuevo tipo denominado Category que herede del tipo Item. Asegúrese de que el tipo pasa sus valores a la implementación base y establezca la variable type para generar el nombre del tipo Category.
public record Category( string Id, string CategoryId ) : Item( Id, CategoryId, nameof(Category) );
Guarde el archivo Category.cs. Cierre el archivo Category.cs.
Por último, cree un archivo denominado Product.cs. Abra este archivo también en el editor.
Cree un nuevo tipo denominado Product que herede de Item y agregue algunas propiedades nuevas:
name
,price
,archived
yquantity
.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; } };
Guarde el archivo Product.cs. Cierre el archivo Product.cs.
Comprobar el trabajo
La aplicación ahora crea una base de datos y un contenedor. Los métodos que usó para crear estos recursos son lo suficientemente resistentes como para ejecutarse varias veces sin provocar una excepción. Aquí, se ejecuta la aplicación y se comprueba la salida de los identificadores únicos de ambos recursos.
Ejecución de la aplicación .NET en el terminal
dotnet run
Observe la salida de la ejecución de la aplicación. La salida debe coincidir con el ejemplo siguiente:
... [Database created]: cosmicworks [Container created]: products