我有一个MVC项目,我使用EF从Northwind数据库引入Products和Categories表.Products表对Categories表的CategoryID字段的CategoryID具有外键约束.我使用向导使用EF添加带有视图的MVC 5控制器.Index操作方法具有此代码
// GET: Products public ActionResult Index() { var products = db.Products.Include(p => p.Category); return View(products.ToList()); }
我假设.include用于引入类别并允许类别名称显示在视图中.但后来我查看了详细信息操作方法,即使它确实显示了类别名称,也不会使用此代码.所以我尝试从索引方法中删除.include来获取它
var products = db.Products;
并运行它,我仍然得到视图中显示的类别名称.所以现在我很困惑为什么.include代码在Index操作方法中而不在Details方法中.任何输入都表示赞赏.
谢谢
Include
对底层SQL查询有影响.使用它时,查询将在Category表上执行连接,否则,查询将仅加载Products表中的数据.如果启用了延迟加载(默认情况下),则在访问该属性时将从数据库加载Category.
从应用程序,这意味着您得到完全相同的结果.区别在于,Include
只有一个查询,如果没有它,您将有一个查询来检索产品列表,然后每次需要第一次访问产品类别时再查询一个.性能影响可能很大(这被称为N + 1问题,因为要加载N个项目的列表,您必须对数据库进行N + 1次往返).