c# - MongoDB C# Driver Find not throwing System.FormatException 反序列化错误并成功运行
问题描述
我在我的 .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;
}
代码成功运行,但在此查询返回的数据中显示错误。
我想抛出这个异常,以便我的框架可以处理它。他们的任何设置是否与此相关。
需要帮忙。
谢谢
解决方案
要从FormatException
MongoDB 驱动程序中获取,您需要从数据库中获取数据,而在您的代码中您只是构建一个查询。您正在使用的扩展方法.ToEnumerable()
没有访问数据库,因此此时您不会得到任何结果。文档说:
将游标包装在可以枚举一次的 IEnumerable 中。
因此,要枚举游标,您可以例如运行foreach
或ToList
在其上运行。否则它只是一个没有任何结果的数据库查询。要解决此问题,您可以更改Find
方法主体:
public virtual IEnumerable<T> Find(Expression<Func<T, bool>> filter)
{
return Collection.Find(filter).ToList();
}
推荐阅读
- outlook - MAC 上的 Outlook Web 加载项,Office.context.mailbox.makeEwsRequestAsync 不起作用
- c - 当 x 为 NaN 或 inf 时,为什么 floor、ceil 实现返回 x + x?
- javascript - 反应:TypeError:this.props.courses.map 不是函数
- python - 模块“tensorflow.contrib.seq2seq”没有属性“simple_decoder_fn_train”
- javascript - JS区分数组中的对象和基元
- c# - 无法过滤以字符串形式存储在 Mongo DB 中的日期列
- c++ - 需要有关函数别名的帮助
- javascript - 有没有办法将 localstorage:getItem() 的结果从 webview 传递给活动
- racket - 为什么 set-union 和朋友不将可变集作为参数?
- postgresql - 如何在 Sequelize 中查询无关联的 INNER JOIN?