Jika Anda melakukan ini dalam async metode, maka jawaban Brduca akan berfungsi (dan lebih disukai), jika tidak, Anda dapat memanggil Wait()
pada Task dikembalikan dari InsertOneAsync panggilan untuk memastikan aplikasi Anda bertahan cukup lama untuk melihat pengecualian kunci duplikat:
commandsCollection.InsertOneAsync(doc).Wait();
Jika penyisipan gagal karena kunci duplikat, Wait() akan melempar AggregateException yang berisi MongoWriteException yang berisi detail kunci duplikat.
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;
});
}
Demikian pula, jika Anda menggunakan await , yang akan memunculkan AggregateException juga.
Untuk menghindari kompleksitas tambahan dari AggregateException membungkus pengecualian mongo, Anda dapat memanggil GetAwaiter().GetResult() bukannya 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
}
}