繁体   English   中英

EF Core 异步客户端评估

[英]EF Core async client side evaluation

使用net5.0 所以我有这个查询:

context.DbSet
  .Where() // server side
  .AsEnumerable()
  .Where() // can't be translated to SQL so client side
  .ToList();

那么我们如何实现这个的异步变体呢? 我会假设它会像这样工作:

await context.DbSet
  .Where() // server side
  .AsAsyncEnumerable()
  .Where() // can't be translated to SQL so client side
  .ToListAsync();

但这不起作用。 什么是正确的方法?

如 EF Core 文档的显式客户端评估部分所述,EF Core 团队的愿景是

如果您正在使用AsAsyncEnumerable并希望在客户端进一步编写查询,那么您可以使用System.Interactive.Async库,它定义了异步枚举的运算符。 有关详细信息,请参阅客户端 linq 运算符

因此,您需要安装 package 并使用

await context.DbSet
  .Where() // server side
  .AsAsyncEnumerable()
  .Where(...) // this is provided by System.Interactive.Async
  .ToList(); // as well this

请注意,当您引用两个包( System.Interactive.AsyncMicrosoft.EntityFrameworkCore时,存在一些方法命名冲突,因为 EF Core DbSet<T>实现了IEnumerable<T>IAsyncEnumerable<T> ,这使得一些扩展方法调用模棱两可),因此您可能会开始遇到编译时错误。 他们的 GitHub 问题跟踪器中存在未解决的问题,但两个团队都不愿意修复他们说问题是由另一个问题引起的。 微软最近使用的开源政策的缺点之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM