Pokud to děláte v rámci async metoda, pak bude odpověď Brducy fungovat (a je výhodnější), jinak můžete zavolat Wait()
na Task vrácené z InsertOneAsync volání, abyste zajistili, že vaše aplikace zůstane dostatečně dlouho, aby se zobrazila výjimka duplicitního klíče:
commandsCollection.InsertOneAsync(doc).Wait();
Pokud se vložení nezdaří kvůli duplicitnímu klíči, Wait() vyvolá AggregateException který obsahuje MongoWriteException který obsahuje podrobnosti o duplicitním klíči.
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;
});
}
Podobně, pokud používáte await , což vyvolá AggregateException také.
Chcete-li se vyhnout přidané složitosti AggregateException po zabalení mongo výjimky můžete zavolat GetAwaiter().GetResult() místo 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
}
}