我已经尝试解决了几个小时,却找不到解决方案。 我正在使用Web Api MVC项目,并尝试将IEnumerable列表转换为异步的分页列表。我可以编译,但是在ToPagedListAsync()行上仍然出现运行时错误。
源IQueryable的提供程序未实现IDbAsyncQueryProvider。只有实现IDbAsyncQueryProvider的提供程序可以用于Entity Framework异步操作。有关更多详细信息,请参见http://go.microsoft.com/fwlink/?LinkId=287068。”
第一层:
public async Task<IEnumerable<MatchingCriteria>> GetMatchingCriterias(int id)
{
return await _ctx.MatchingCriterias.Include(mc => mc.RuleDefinition).Where(mc => mc.RuleDefinitionId == id).ToListAsync();
}
第二层:
internal async Task<IEnumerable<MatchingCriteria>> GetMatchingCriterias(int id)
{
using (CrawlerDbContext db = new CrawlerDbContext())
{
var matchCriteriaMgr = new MatchingCriteriaManager(db);
return await matchCriteriaMgr.GetMatchingCriterias(id);
}
}
控制器:
public async Task<ActionResult> Index(int? id, string sortOrder, string currentFilter, string searchString, int? page){
var matchingCriterias = await _crawlerProvider.GetMatchingCriterias(id.Value);
//...
IQueryable<MatchingCriteria> matchCrit = matchingCriterias.AsQueryable();
//Error here -> return View(await matchCrit.ToPagedListAsync(pageNumber, pageSize));
}
如果我改为在控制器中这样做:
var matchingCriterias = _db.MatchingCriterias.Include(mc => mc.RuleDefinition);
然后:
return View(await matchingCriterias.ToPagedListAsync(pageNumber, pageSize)
那很好!
我可以在嵌套方法上返回DbSet,但不能在第一层使用ToListAsync();
有没有办法使列表可查询?
还有其他想法或建议吗?
答案 0 :(得分:0)
好吧,我自己通过创建here
来创建AsyncQueryable扩展名来修复了该问题然后我可以像下面这样调用pagedListAsync()方法:
return View(await matchingCriterias.AsAsyncQueryable().ToPagedListAsync(pageNumber, pageSize)