c# - 如何使 IEnumerable 和 IQueryable 异步?

标签 c# .net entity-framework asp.net-core async-await

我正在尝试使我的通用基础存储库全部异步并且我有代码:

public IEnumerable<T> GetAll()
{
    return _dbContext.Set<T>();
}

public IQueryable<T> GetQueryable()
{
    return _dbContext.Set<T>();
}

既然没有SetAsync之类的方法,我该如何让这些方法异步呢?

最佳答案

对于返回数据的方法,您可以将它们设为异步:

public IAsyncEnumerable<T> GetAll()
{
    return _dbContext.Set<T>().AsAsyncEnumerable();
}

public async Task<IList<T>> GetAll()
{
    return await _dbContext.Set<T>().ToListAsync();
}

但是您不希望此方法是异步的。

public IQueryable<T> GetQueryable()
{
    return _dbContext.Set<T>();
}

因为它不返回数据或执行数据库访问。它只是给调用者一个 stub 查询来使用。所以调用者会运行一个异步查询,如:

var orders = await customerRepo.GetQueryable().Where( o => o.CustomerId = 123 ).ToListAsync();

关于c# - 如何使 IEnumerable 和 IQueryable 异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66258812/

相关文章:

c# - 部署自托管 SignalR

c# - 如何使用仅具有键值参数的帮助 HttpClient 发送表单数据 POST 请求

c# - 使用 Levenshtein 距离检测字符串相似性(很慢)

c# - 针对 DTO 的 OData 查询,针对 EF 执行

c# - 日期格式在带有 Entity Framework 的 MVC 中不起作用?

c# - 将十六进制代码转换为颜色名称

c# - asp.net 核心身份来自 BaseApplicationUser 的多个用户

c++ - Unity3D中的高清视频通话

.net - 向 GAC 注册/安装程序集的 'correct' 方法是什么?

c# - 如何使用 C#、Entity Framework 和 SQL Server 2008 读取/写入地理数据?