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