Ejercicio: Creación de una cuenta y recursos de API para NoSQL

Completado

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:

  1. Creación de una base de datos si aún no existe
  2. Creación de un contenedor si aún no existe

Ilustración de iconos que indican que los recursos de Azure Cosmos DB se crean en la nube.

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.

  1. Vuelva al archivo Program.cs.

  2. 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"
    );
    
  3. Genere el identificador único de la base de datos.

    Console.WriteLine($"[Database created]:\t{database.Id}");
    
  4. 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.

  1. 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"
    );
    
  2. 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
    );
    
  3. 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
    );
    
  4. Genere el identificador único del contenedor.

    Console.WriteLine($"[Container created]:\t{container.Id}");
    
  5. 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.

  1. En Visual Studio Code, cree un archivo denominado Item.cs. A continuación, abra el archivo en el editor.

  2. 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 y type.

    public record Item(
        string Id,
        string CategoryId,
        string Type
    );
    
  3. Guarde el archivo Item.cs. Cierre el archivo Item.cs.

  4. Cree otro archivo denominado Category.cs. Abra este archivo en el editor ahora.

  5. 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)
    );
    
  6. Guarde el archivo Category.cs. Cierre el archivo Category.cs.

  7. Por último, cree un archivo denominado Product.cs. Abra este archivo también en el editor.

  8. Cree un nuevo tipo denominado Product que herede de Item y agregue algunas propiedades nuevas: name, price, archived y 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. 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.

  1. Ejecución de la aplicación .NET en el terminal

    dotnet run
    
  2. 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