अगर आप इसे 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
throw फेंक देगा साथ ही।
AggregateException
. की अतिरिक्त जटिलता से बचने के लिए मोंगो अपवाद को लपेटकर, आप 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
}
}