如果我嘗試運行這段代碼什麼是.`ToListAsync的目的()`
await _dbContext.Set<T>().ToListAsync();
我會得到這個錯誤:
出現InvalidOperationException:源的IQueryable沒有實現IDbAsyncEnumerable 。只有實現IDbAsyncEnumerable的源才能用於實體框架異步操作。欲瞭解更多詳情,請參見http://go.microsoft.com/fwlink/?LinkId=287068
通過下面提供的link我們可以仔細閱讀以下聲明
[...],因爲他們只設計與實體框架一起使用時可能會收到以下錯誤如果您嘗試在不是實體框架查詢的LINQ查詢上使用它們。
那麼爲什麼我不能在DbSet上使用它?對我來說,DbSet顯然是一個實體框架相關的類,因爲它可以在EntityFramework程序集中找到...
按照DbSet MSDN documentation,它實現了IDbAsyncEnumerable.GetAsyncEnumerator()
。如果執行IDbAsyncEnumerable
,爲什麼不能運行.ToListAsync()
?
此外,通過使用反編譯ReSharper的挖掘到的代碼我不明白,此時出了問題......在內部使用嘗試我DbSet<T>
鑄成IDbAsyncEnumerable<T>
的AsDbAsyncEnumerable
方法應該因爲DbSet
器具工作它...
在這一點上我的代碼使用以下行,這正是我期望.ToListAsync()
內部做的。
await _dbContext.Set<T>().ToAsyncEnumerable().ToList();
爲什麼ToAsyncEnumerable
在內部使用?在這種情況下,如果ToListAsync
不適用於正常的IQueryable
和DbSet
,則可以使用ToListAsync
?
發佈*可重現的*例子。 *您的目標是哪個*框架和*哪個數據庫? EF6不是EF Core 2.0。我使用'ToListAsync',但我更喜歡'ToArrayAsync' –
您已經標記了Ef6和EfCore2,請先下定決心。 –
這可能是一個糟糕的混合... ToListAsync()是一種擴展方法。 –