sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB (servidor v 2.6.7) con controlador C# 2.0:cómo obtener el resultado de InsertOneAsync

Si está haciendo esto dentro de un async método, entonces la respuesta de Brduca funcionará (y es preferible), de lo contrario, puede llamar a Wait() en la Task devuelto desde InsertOneAsync Llame para asegurarse de que su aplicación permanezca el tiempo suficiente para ver la excepción de clave duplicada:

commandsCollection.InsertOneAsync(doc).Wait();

Si la inserción falla debido a una clave duplicada, Wait() lanzará una AggregateException que contiene una MongoWriteException que contiene los detalles de la clave 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;
    });
}

Del mismo modo, si está utilizando await , que arrojará una AggregateException también.

Para evitar la complejidad añadida de AggregateException envolviendo la excepción mongo, puede llamar a GetAwaiter().GetResult() en lugar 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
    }
}