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