我正在尝试在一个新项目中对我的第一个存储库进行单元测试,我们决定使用EF6主要用于异步内容。我在为我的模型伪造IDbSet时遇到问题,并允许在使用新的异步细节之前使用任何Linq。
我使用FakeDbSet作为provided in this post。如果我做一个简单的查询,例如
await set.FirstOrDefaultAsync(e => e.Approved);
这很有效。
当我尝试这样做时会出现问题:
await set.OrderByDescending(e => e.Date)
.FirstOrDefaultAsync(e => e.Approved)`
然后我收到错误:
System.InvalidOperationException:源IQueryable的提供程序未实现IDbAsyncQueryProvider。
通过分解流畅的语法并检查每一步的结果,我很清楚IDbAsyncQueryProvider在第一个“普通”Linq运算符后消失(例如OrderBy
,Where
或{{ 1}})。
我怎样才能让它发挥作用?
更新(因为有些混乱):有2个项目;称他们为存储库和测试。测试课程参考资料库。对Select
的调用发生在Repository中,它不知道FakeDbSet(也不应该知道它,因为它是一个仅测试类)。
更新2 :简单演示project can be downloaded here。在运行单元测试之前恢复Nuget包。