我有一個MVC項目,我用EF來從Northwind數據庫中導入Products和Categories表。 Products表對CategoryID表的CategoryID字段具有CategoryID上的外鍵約束。我使用該向導使用EF添加了包含視圖的MVC 5控制器。 Index操作方法的代碼MVC自動生成索引方法 - 爲什麼需要.include?
// GET: Products
public ActionResult Index()
{
var products = db.Products.Include(p => p.Category);
return View(products.ToList());
}
我認爲在.include在那裏的範疇帶來,並允許在視圖中顯示的類別名稱。但後來我查看了Details操作方法,即使它顯示了類別名稱,它也不使用此代碼。所以然後我試圖剝離索引方法的.include來獲得這個
var products = db.Products;
並運行它,我仍然得到在視圖中顯示的類別名稱。所以現在我很困惑,爲什麼.include代碼在Index操作方法中,而不是在Details方法中。任何輸入讚賞。
感謝
如果您事先知道需要'Category',那麼最好是'Include()',這樣EF就會生成一個更高效的SQL來檢索它。當您不使用Include()時,EF將以「延遲加載」模式運行,並在嘗試訪問「Category」時發出另一個SQL。顯然,只有在配置中啓用延遲加載(默認情況下),延遲加載纔會起作用。 – haim770