我正在關注Microsoft 的 ASP.NET MVC 教程,作為其中的一部分,我通過腳手架為模型Movie生成了 CRUD 操作。
索引視圖頂部有以下行:
@model IEnumerable<MvcMovie.Models.Movie>
控制器首先通過將DbSet<MvcMovie.Models.Movie>其轉換為DbContextList 來傳遞該物件:
public async Task<IActionResult> Index()
{
return View(await _context.Movie.ToListAsync());
}
本教程確認這是預期行為:
檢查 Index.cshtml 視圖和 Movies 控制器中的 Index 方法。請注意代碼在呼叫 View 方法時如何創建 List 物件。代碼將這個 Movies 串列從 Index action 方法傳遞到視圖:
但是,查看DbSet該類,它實作了IEnumerable<TEntity>,在本例中TEntity是 Movie 物件。那么,為什么要把它轉換成 List 呢?
我通過_context.Movie按原樣傳遞來測驗它,它似乎作業得很好。
這樣做有什么理由嗎?
uj5u.com熱心網友回復:
我通過按原樣傳遞 _context.Movie 來測驗它,它似乎作業得很好。
它似乎作業得很好,在最簡單的情況下,它甚至可能作業。然而:
該View方法需要遍歷您傳入的資料。在 a 的情況下DbSet<T>,這意味著將同步SELECT編輯整個資料庫表。關于同步和異步操作(包括資料庫呼叫)之間的區別有很多帖子/等,所以除了說:在大多數情況下,必須避免 Entity Framework Core 的同步使用之外,我不會深入研究細節。
這意味著,為了確保查詢的異步執行,必須使用異步查詢執行器之一,這是一個常見的選擇,盡管為此目的也能正常作業。ToListAsyncToArrayAsync
這是第一部分。第二部分是,由于您正在回傳對 的參考DbSet<T>,因此資料尚未在記憶體中,因此在執行查詢的某個時間點之前需要打開與資料庫的連接。另一個問題是查詢可能最終被執行多次,這取決于將結果發送回客戶端的任何實作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/336528.html
標籤:C# asp.net核心 实体框架核心 asp.net-core-mvc
上一篇:字典作為類屬性和方法的引數
