【发布时间】:2017-01-11 06:15:58
【问题描述】:
我有一个 MVC 项目,我使用 EF 从 Northwind 数据库中引入 Products 和 Categories 表。 Products 表在 CategoryID 上对 Categories 表的 CategoryID 字段有一个外键约束。我使用向导使用 EF 添加带有视图的 MVC 5 控制器。 Index action 方法有这个代码
// GET: Products
public ActionResult Index()
{
var products = db.Products.Include(p => p.Category);
return View(products.ToList());
}
我假设 .include 用于引入类别并允许在视图中显示类别名称。但是后来我查看了 Details 操作方法,它没有使用此代码,即使它确实显示了类别名称。然后我尝试从 Index 方法中剥离 .include 来得到这个
var products = db.Products;
并运行它,我仍然会在视图中显示类别名称。所以现在我很困惑为什么 .include 代码在 Index 操作方法中而不是在 Details 方法中。任何意见表示赞赏。
谢谢
【问题讨论】:
-
如果您事先知道您将需要
Category,那么最好使用Include(),以便EF 生成更有效的SQL 来检索它。当您不使用Include()时,EF 将以“延迟加载”模式运行,并在尝试访问Category时发出另一个 SQL。显然,延迟加载只有在配置中启用时才会起作用(默认情况下)。
标签: c# asp.net-mvc entity-framework