MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB (Server v 2.6.7) mit C#-Treiber 2.0:So erhalten Sie das Ergebnis von InsertOneAsync

Wenn Sie dies innerhalb eines async tun Methode, dann funktioniert die Antwort von Brduca (und ist vorzuziehen), andernfalls können Sie Wait() auf der Task zurückgegeben von InsertOneAsync aufrufen, um sicherzustellen, dass Ihre Anwendung lange genug verfügbar bleibt, um die Ausnahme von doppelten Schlüsseln zu sehen:

commandsCollection.InsertOneAsync(doc).Wait();

Wenn das Einfügen aufgrund eines doppelten Schlüssels fehlschlägt, wird die Wait() löst eine AggregateException aus die eine MongoWriteException enthält die die doppelten Schlüsseldetails enthält.

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

Ebenso, wenn Sie await verwenden , die eine AggregateException auslöst auch.

Um die zusätzliche Komplexität der AggregateException zu vermeiden Um die Mongo-Ausnahme zu verpacken, können Sie GetAwaiter().GetResult() aufrufen statt 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
    }
}