Ако правите това в рамките на async метод, тогава отговорът на Brduca ще работи (и е за предпочитане), в противен случай можете да извикате Wait()
на Task върнат от InsertOneAsync извикайте, за да се уверите, че приложението ви остава достатъчно дълго, за да видите изключението за дублиран ключ:
commandsCollection.InsertOneAsync(doc).Wait();
Ако вмъкването е неуспешно поради дублиран ключ, Wait() ще хвърли AggregateException който съдържа MongoWriteException който съдържа дублиращите се ключови подробности.
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;
});
}
По същия начин, ако използвате await , което ще хвърли AggregateException както и.
За да избегнете допълнителната сложност на AggregateException обвивайки изключението mongo, можете да извикате GetAwaiter().GetResult() вместо 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
}
}