MongoDB に新しいデータをプッシュしようとすると、「シリアル化の最大深度を超えました」というエラーが表示されます。MongoDB Community を使用して localhost で単体テストを実行すると、問題なく動作します。どんな助けでも大歓迎です。また、循環参照も表示されません。
データの保存を開始する機能です。最初にローカル キャッシュに移動し、次にクラウド (MongoDB) に移動します。
///Calling function
public async Task AddComment(Range item, Comment commentItem)
{
try
{
//Save to local cache
item.Comments.Add(commentItem);
//Next save to cloud
await CloudStorage.AddComment(item.User.ID, item.ID, commentItem);
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
//-->ERROR HAPPENS LAST LINE HERE<--
public async Task<UpdateResult> AddComment(string ownerID, string rangeID, Comment comment)
{
var filter = Builders<User>.Filter.Where(u => u.ID == ownerID &&
u.Content.Any(i => i.ID == rangeID));
var update = Builders<User>.Update.Push(c => c.Content[-1].Comments, comment);
return await collection.UpdateOneAsync(filter, update); //<- THIS THROWS ERROR
}
これは、localhost で動作する単体テストです。
[TestMethod]
public void TestInsertComment()
{
//Arrange
var owner = "OWNER";
var ownerData = collection.Find(u => u.Username.Equals(owner)).FirstOrDefault();
var ownerID = ownerData?.ID;
var range = ownerData?.Content.FirstOrDefault();
var newComment = new Comment
{
User = range?.User,
Content = "Some comment",
IsLive = true
};
//Act
var results = _cloudStorageService.AddComment(ownerID, range?.ID, newComment);
results.Wait();
var insertedID = collection.Find(u => u.Username.Equals(owner))
.FirstOrDefault().Content.FirstOrDefault()?
.Comments.FirstOrDefault(c => c.ID.Equals(newComment.ID))?.ID;
//Assert
Assert.AreEqual(newComment.ID, insertedID);
}
更新:私が気づいたことの 1 つは、同じユーザーが自分の範囲にコメントを追加しようとすると、このエラーが発生するのはそのときだけです。別のユーザーがコメントを追加すると、問題なく機能します。また、単体テストは、同じユーザーであるか他のユーザーであるかに関係なく、常に正常に機能します。