MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB (servidor v 2.6.7) com driver C# 2.0:Como obter o resultado de InsertOneAsync


Se você estiver fazendo isso em um async , então a resposta de Brduca funcionará (e é preferível), caso contrário você pode chamar Wait() na Task retornado do InsertOneAsync call para garantir que seu aplicativo permaneça por tempo suficiente para ver a exceção de chave duplicada:
commandsCollection.InsertOneAsync(doc).Wait();

Se a inserção falhar devido a uma chave duplicada, o Wait() lançará um AggregateException que contém uma MongoWriteException que contém os detalhes da chave duplicada.
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;
    });
}

Da mesma forma, se você estiver usando await , que lançará um AggregateException também.

Para evitar a complexidade adicional do AggregateException envolvendo a exceção do mongo, você pode chamar GetAwaiter().GetResult() em vez 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
    }
}