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