अगर आप इसे 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
}
}