Я получаю сообщение об ошибке «Превышена максимальная глубина сериализации» при попытке отправить новые данные на MongoDB. При модульном тестировании на локальном хосте с сообществом MongoDB это работает без проблем. Любая помощь будет оценена. Я также не вижу циркулярную справку.
Эта функция запускает сохранение данных. Сначала в мой локальный кеш, затем в облако (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);
}
ОБНОВЛЕНИЕ: Одна вещь, которую я заметил, это то, что если один и тот же пользователь пытается добавить комментарий в свой диапазон, это единственный раз, когда возникает эта ошибка. Если другой пользователь добавляет комментарий, он работает просто отлично. И модульный тест работает отлично все время, независимо от того, тот же пользователь или другой пользователь.