-1

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 つは、同じユーザーが自分の範囲にコメントを追加しようとすると、このエラーが発生するのはそのときだけです。別のユーザーがコメントを追加すると、問題なく機能します。また、単体テストは、同じユーザーであるか他のユーザーであるかに関係なく、常に正常に機能します。

4

1 に答える 1