哪裏ToListAsync()在實體框架7.我如何返回一個集合或使用的SingleOrDefault在EF異步方法7.實體框架7異步收藏
public async Task<IEnumerable<TodoItem>> GetAllAsync()
{
//TODO: ToListAsync missing?
return await _context.Todos.ToAsyncEnumerable();
}
這是返回一個錯誤不包含定義GetAwaiter? SaveChangesAsync沒有問題。
通常,我不會調用MyCollection.ToList()(異步或其他),因爲集合將被評估,並且集合會立即放置在內存中。你怎麼能返回一個IEnumberable/IQueryable而不是一個列表,這樣我可以進一步查詢,然後只執行它就可以使用。這就像我們缺少一個ToAsyncEnumerable/ToAsyncQueryable解決方案。 – DanAbdn
@DanAbdn由於'IEnumerable'接口不允許異步,因爲'MoveNext()'不支持任務,而這就是需要異步的位。所以如果你需要使用異步,唯一的方法是'ToListAsync()'。或者你可以使用'.Select(x => x.Id).ToListAsync()'選擇所有的id,然後使用FirstAsync()來獲取每個項目。 –
這會比'ToListAsync'慢很多,因爲每個'FirstAsync'都會是一個新的SQL查詢 –