Als je dit doet binnen een async
methode, dan zal het antwoord van Brduca werken (en heeft de voorkeur), anders kunt u Wait()
op de Task
geretourneerd van de InsertOneAsync
aanroepen om ervoor te zorgen dat uw toepassing lang genoeg in de buurt blijft om de uitzondering voor de dubbele sleutel te zien:
commandsCollection.InsertOneAsync(doc).Wait();
Als het invoegen mislukt vanwege een dubbele sleutel, wordt de Wait()
gooit een AggregateException
die een MongoWriteException
. bevat die de dubbele sleuteldetails bevat.
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;
});
}
Evenzo, als u await
. gebruikt , die een AggregateException
. genereert ook.
Om de extra complexiteit van de AggregateException
te vermijden de mongo-uitzondering inpakken, kunt u GetAwaiter().GetResult()
aanroepen in plaats van 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
}
}