Hvis du gør dette inden for en async metode, så vil Brducas svar virke (og er at foretrække), ellers kan du ringe til Wait()
på Task returneret fra InsertOneAsync ring for at sikre, at din applikation forbliver længe nok til at se undtagelsen med dubletnøgle:
commandsCollection.InsertOneAsync(doc).Wait();
Hvis indsættelsen mislykkes på grund af en dubletnøgle, vises Wait() vil kaste en AggregateException der indeholder en MongoWriteException der indeholder de duplikerede nøgledetaljer.
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;
});
}
På samme måde, hvis du bruger await , der vil kaste en AggregateException også.
For at undgå den ekstra kompleksitet af AggregateException indpakning af mongo-undtagelsen, kan du kalde GetAwaiter().GetResult() i stedet for 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
}
}