Драйвер MongoDB C # Найти не выбрасывает System.FormatException Ошибка десериализации и работает успешно - PullRequest
0 голосов
/ 20 февраля 2019

Я использую последнюю версию драйвера c # mongo в своем приложении .net core 2.0.У меня есть эта ошибка в моем коде

Невозможно десериализовать 'String' из BsonType 'Int64'. .

Но запрос монго не вызывает никаких исключений.Вот метод поиска в моем репозитории.

        /// <summary>
        /// find entities
        /// </summary>
        /// <param name="filter">expression filter</param>
        /// <returns>collection of entity</returns>
        public virtual IEnumerable<T> Find(Expression<Func<T, bool>> filter)
        {
            return Collection.Find(filter).ToEnumerable();
        }

        /// <summary>
        /// find entities
        /// </summary>
        /// <param name="filter">expression filter</param>
        /// <returns>collection of entity</returns>
        public Task<IEnumerable<T>> FindAsync(Expression<Func<T, bool>> filter)
        {
            return Task.Run(() => Find(filter));
        }

Вот код обработчика

public async Task<object> Handle(GetQuestionBySurveyIdAndCodeQuery request, CancellationToken cancellationToken)
    {
      var result = await _context.Question.FindAsync(x => x.SurveyId.Equals(request.SurveyId));
      return result;
    }

Код успешно выполнен, но показывает ошибку внутри данных, возвращенных из этого запроса.

enter image description here

enter image description here

Я хочу вызвать это исключение, чтобы мой фреймворк мог его обработать.Есть ли какие-либо настройки, связанные с этим.

Нужна помощь.

Спасибо

1 Ответ

0 голосов
/ 21 февраля 2019

Чтобы получить FormatException от драйвера MongoDB, вам нужно извлечь данных из базы данных, в то время как в вашем коде вы только строите запрос.Используемый вами метод расширения .ToEnumerable() не влияет на базу данных, поэтому в этот момент вы не получите никаких результатов.Документация говорит , что это:

Оборачивает курсор в IEnumerable, который можно перечислить один раз.

Итак, чтобы перечислить курсор, вы можетенапример, запустите foreach или ToList на нем.В противном случае это просто запрос к базе данных без каких-либо результатов.Чтобы исправить это, вы можете изменить тело метода Find:

public virtual IEnumerable<T> Find(Expression<Func<T, bool>> filter)
{
    return Collection.Find(filter).ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...