Ако правите това в рамките на 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
}
}