MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB (serveur v 2.6.7) avec pilote C# 2.0 :Comment obtenir le résultat de InsertOneAsync

Si vous faites cela dans un async méthode, alors la réponse de Brduca fonctionnera (et est préférable), sinon vous pouvez appeler Wait() sur la Task renvoyé par InsertOneAsync appelez pour vous assurer que votre application reste suffisamment longtemps pour voir l'exception de clé en double :

commandsCollection.InsertOneAsync(doc).Wait();

Si l'insertion échoue à cause d'une clé en double, le Wait() lancera une AggregateException qui contient une MongoWriteException qui contient les détails de la clé en double.

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;
    });
}

De même, si vous utilisez await , qui lancera une AggregateException aussi.

Pour éviter la complexité supplémentaire de l'AggregateException enveloppant l'exception mongo, vous pouvez appeler GetAwaiter().GetResult() au lieu de 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
    }
}