13

我正在尝试在一个新项目中对我的第一个存储库进行单元测试,我们决定将 EF6 主要用于异步内容。我在为我的模型伪造 IDbSet 时遇到问题,并且在使用新的异步细节之前允许使用任何 Linq。

我正在使用本文中提供的 FakeDbSet 。如果我做一个简单的查询,比如

await set.FirstOrDefaultAsync(e => e.Approved);

这很好用。

当我尝试这样做时会出现问题:

await set.OrderByDescending(e => e.Date)
         .FirstOrDefaultAsync(e => e.Approved)`

然后我得到一个错误:

System.InvalidOperationException:源 IQueryable 的提供程序未实现 IDbAsyncQueryProvider。

通过分解流畅的语法并检查每一步的结果,我很清楚 IDbAsyncQueryProvider 在第一个“普通”Linq 运算符(例如OrderByWhereSelect)之后消失了。

我怎样才能让它工作?

更新(因为有些混乱):有 2 个项目;称他们为存储库和测试。测试当然参考存储库。调用Where发生在存储库中,它不知道 FakeDbSet(也不应该知道,因为它是一个仅测试类)。

更新 2:简单的演示项目可以在这里下载。在运行单元测试之前恢复 Nuget 包。

4

1 回答 1

1

在这里,您有一个链接,其中包含您需要实现的确切类。 http://msdn.microsoft.com/en-us/data/dn314429.aspx#async

于 2014-09-08T12:10:21.630 回答