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