我定义了一个模型,Item,它具有以下属性:
public class Item
{
public bool Active { get; set; }
public string ItemCode { get; set; }
public int ItemId { get; set; }
public string Name { get; set; }
public Category Category { get; set; }
public int CategoryId { get; set; }
}
我正在尝试从Item控制器的详细信息视图中引用Category。我在控制器中的代码是:
public ActionResult Details(int id = 0)
{
Item item = db.Items.Find(id);
if (item == null)
{
return HttpNotFound();
}
return View(item);
}
但是,当我在此处浏览item对象时,可以看到CategoryId设置正确,Category属性设置为null。因此,当我引用Item.Category.Name时,我得到的是空白结果。我曾尝试过将我的属性虚拟化(遵循在线教程),但这似乎无法解决问题。我究竟做错了什么?
您可以通过将属性标记为virtual来延迟加载属性Category
:
public virtual Category Category { get; set; }
访问属性后,这将向数据存储区触发另一个查询,以询问相关类别Category
。item.Category.Name
例如。
或者,您可以使用以下方法来急于加载类别Include
:
Item item = db.Items
.Include(item => item.Category)
.FirstOrDefault(item => item.ID == id);
这将在1个查询中从数据存储中检索包含相关类别的项目。注意,我FirstOrDefault
在这里代替Find
,因为返回类型为Include
isIQueryable<T>
和not DbSet<T>
。
有关加载相关数据的更多信息,请参见本文。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句