MongoDB C#驱动程序查找未引发System.FormatException反序列化错误并成功运行

时间:2019-02-20 19:24:06

标签: c# mongodb mongodb-query mongodb-.net-driver

我在.net core 2.0应用程序中使用最新的c#mongo驱动程序。我的代码中存在此错误

无法从BsonType'Int64'反序列化'String'。

但是mongo查询不会引发任何异常。这是我的存储库中的find方法。

        /// <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 :(得分:0)

要从MongoDB驱动程序获取FormatException,您需要从数据库中获取数据,而在代码中,您仅需要构建查询。您使用的扩展方法.ToEnumerable()不会访问数据库,因此此时您将不会获得任何结果。文档says如下:

  

将光标包装到一个可以枚举一次的IEnumerable中。

因此要枚举光标,您可以在其上运行foreachToList。否则,它只是一个没有任何结果的数据库查询。要解决此问题,您可以更改Find方法主体:

public virtual IEnumerable<T> Find(Expression<Func<T, bool>> filter)
{
    return Collection.Find(filter).ToList();
}