我一直在努力使以下控制器方法异步
public IQueryable<Category> GetCategories()
{
return _context.Categories;
}
我添加了以下内容以使其异步
public async Task<IQueryable<Category>> GetCategories()
{
return await _context.Categories;
}
类型System.Data.Entity.DbSet不可等待
我不确定如何在保持IQueryable的同时让db上下文返回所有实体。
如何使上述方法异步?谢谢或帮助。
答案 0 :(得分:6)
听起来您正在实施OData端点。如果您在此级别执行此操作(直接从控制器返回DbSet
),则异步性质完全取决于WebAPI;你正在做的只是返回IQueryable
它可以同步或异步使用。
没有什么可以做到“使”它异步,并且没有理由。
答案 1 :(得分:3)
这是我找到的解决方案:
public async Task<IEnumerable<Category>> Get(ODataQueryOptions<Category> options)
{
var myQueryable = (IQueryable<Category>)options.ApplyTo(context.Categories);
return await myQueryable.ToListAsync();
}
它工作异步并应用过滤器。
答案 2 :(得分:0)
我有类似的问题,由于某些原因我不能直接使用.ToListAsync()
,VS也不允许我使用QueryableExtensions命名空间。最后,我决定实现整个代码:
var categories = await System.Data.Entity.QueryableExtensions.ToListAsync(context.Categories.Where(c => c.Name != "On Sale"));