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