Creare i documenti

Completato

Per creare un nuovo elemento, è prima necessario creare una nuova variabile in codice C# di tipo Prodotto.

Product saddle = new()
{
    id = "027D0B9A-F9D9-4C96-8213-C8546C4AAE71",
    categoryId = "26C74104-40BC-4541-8EF5-9892F7F03D72",
    name = "LL Road Seat/Saddle",
    price = 27.12d,
    tags = new string[] 
    {
        "brown",
        "weathered"
    }
};

Si supponga che sia già presente una variabile di tipo Microsoft.Azure.Cosmos.Container denominata container.

In questo caso, è possibile richiamare il metodo CreateItemAsync<> in modo asincrono passando al costruttore il tipo Product e la variabile del nuovo elemento.

await container.CreateItemAsync<Product>(saddle);

Questa chiamata del metodo crea il nuovo elemento, ma non contiene metadati relativi al risultato dell'operazione. In alternativa, è possibile archiviare il risultato dell'operazione in una variabile di tipo ItemResponse<>.

ItemResponse<Product> response = await container.CreateItemAsync<Product>(saddle);

HttpStatusCode status = response.StatusCode;
double requestUnits = response.RequestCharge;

Product item = response.Resource;

Se si usa un blocco try-catch, inoltre, è possibile gestire il tipo CosmosException, che include una proprietà StatusCode per i valori del codice di stato HTTP. È opportuno valutare l'opportunità di inserire nel codice dell'applicazione alcuni codici di stato HTTP comuni:

Codice Title Motivo
400 Richiesta non valida Si è verificato un problema con l'elemento nel corpo della richiesta
403 Non consentito È probabile che il contenitore fosse già completo
409 Conflitto All'elemento del contenitore potrebbe essere già associato un ID
413 RequestEntityTooLarge L'elemento supera le dimensioni massime dell'entità
429 TooManyRequests La richiesta corrente supera il numero massimo di UR/s di cui è possibile effettuare il provisioning per il contenitore

In questo esempio

try
{
    await container.CreateItemAsync<Product>(saddle);
}
catch(CosmosException ex) when (ex.StatusCode == HttpStatusCode.Conflict)
{
    // Add logic to handle conflicting ids
}
catch(CosmosException ex) 
{
    // Add general exception handling logic
}