MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB (server v 2.6.7) con driver C# 2.0:come ottenere il risultato da InsertOneAsync

Se lo stai facendo all'interno di un async metodo, quindi la risposta di Brduca funzionerà (ed è preferibile), altrimenti puoi chiamare Wait() nel Task restituito da InsertOneAsync chiama per assicurarti che la tua applicazione rimanga abbastanza a lungo per vedere l'eccezione della chiave duplicata:

commandsCollection.InsertOneAsync(doc).Wait();

Se l'inserimento non riesce a causa di una chiave duplicata, Wait() genererà un AggregateException che contiene una MongoWriteException che contiene i dettagli della chiave duplicata.

try
{
    commandsCollection.InsertOneAsync(doc).Wait();
}
catch(AggregateException aggEx)
{
    aggEx.Handle(x => 
    { 
        var mwx = x as MongoWriteException;
        if (mwx != null && mwx.WriteError.Category == ServerErrorCategory.DuplicateKey) 
        {
            // mwx.WriteError.Message contains the duplicate key error message
            return true; 
        }
        return false;
    });
}

Allo stesso modo, se stai usando await , che genererà un AggregateException anche.

Per evitare la complessità aggiuntiva di AggregateException avvolgendo l'eccezione mongo, puoi chiamare GetAwaiter().GetResult() invece di Wait() :

try
{
    commandsCollection.InsertOneAsync(doc).GetAwaiter().GetResult();
}
catch(MongoWriteException mwx)
{
    if (mwx.WriteError.Category == ServerErrorCategory.DuplicateKey) 
    {
        // mwx.WriteError.Message contains the duplicate key error message
    }
}