ToListAsync()的作用是什么?

Mathieu VIALES

如果我尝试运行此代码

await _dbContext.Set<T>().ToListAsync();

我会收到此错误:

InvalidOperationException:源IQueryable没有实现IDbAsyncEnumerable。只有实现IDbAsyncEnumerable的源才能用于Entity Framework异步操作。有关更多详细信息,请参见http://go.microsoft.com/fwlink/?LinkId=287068

通过点击提供的链接,我们可以阅读以下声明

[...]因为它们仅设计用于Entity Framework,所以如果您尝试在不是Entity Framework查询的LINQ查询上使用它们,则可能会收到以下错误。

那我为什么不能在DbSet上使用它呢?对我来说,DbSet显然是与实体框架相关的类,因为它是在EntityFramework程序集中找到的...

根据DbSet MSDN文档,它实现了IDbAsyncEnumerable.GetAsyncEnumerator()如果IDbAsyncEnumerable实施了,为什么不能.ToListAsync()运行?

另外,通过使用ReSharper反编译器深入研究代码,我不明白它在哪一点出了错...AsDbAsyncEnumerable内部使用方法试图将我DbSet<T>转换为一个IDbAsyncEnumerable<T>DbSet实现以来可以工作的...

在这一点上,我的代码使用以下行,这正是我期望.ToListAsync()在内部执行的操作。

await _dbContext.Set<T>().ToAsyncEnumerable().ToList();

为什么在ToAsyncEnumerable内部使用?ToListAsync如果在正常模式IQueryable正常模式下均不起作用,使用哪种情况DbSet

Mathieu VIALES

Panagiotis Kanavos和Henk Holterman在评论中指出了正确的事情:EF6不是EF Core。出于某种原因,我只是简单地假设这两者是相同的,其中“ core”是一个用作别名的奇特名称。可能由于这个原因,我最终在项目中同时拥有了两者。

我尝试了很多方法来修复该错误,但最终我仅通过从项目中删除可能与Entity Framework或多或少远程相关的每个程序包来解决所有问题,除了Microsoft.NETCore.App它是.netcote 2.0应用程序中的必需程序。从那里开始,我开始根据依赖于MSDN查找软件包名称的编译器哭泣的名称空间和类添加软件包。

现在正确回答我的问题:ToListAsync()确实应该执行该操作。它只是不能识别DbContextEF6,因为它不是EFCore软件包的一部分。因此,将两者混为一谈不是一个好主意。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章