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