Asp.net 在MVC中使用DBContext语句

Asp.net 在MVC中使用DBContext语句,asp.net,asp.net-mvc,entity-framework,Asp.net,Asp.net Mvc,Entity Framework,我正在使用ASP.NETMVC4.5和EntityFramework,我读到的所有内容都表明我的数据库上下文应该包含在using语句中,以防止内存泄漏。但是,当我将模型传递给视图时,我就失去了连接到其他表的能力 因此,如果我有一个模型: public class people { public int id { get; set; } public sting name { get; set; } public virtual stuff things { get; set;

我正在使用ASP.NETMVC4.5和EntityFramework,我读到的所有内容都表明我的数据库上下文应该包含在using语句中,以防止内存泄漏。但是,当我将模型传递给视图时,我就失去了连接到其他表的能力

因此,如果我有一个模型:

public class people
{
   public int id { get; set; }
   public sting name { get; set; }
   public virtual stuff things { get; set; }
}
public class stuff
{
   public int id { get; set; }
   public string name { get; set; }
   public int thingType { get; set; }
}

但在我看来,如果我想循环add,抓取一个人的所有东西,如果我在using语句中创建了上下文,我就不能。处理此问题的正确方法是什么?

当在
中设置ViewModel时,应在子集合上调用
ToList()
,使用
块在处理上下文之前获取子关系。

可以在上下文仍然打开时检索子集合。你可以急切地或懒散地去做:

using (var context = new SomeContext()) {
    // This will do a JOIN on the SQL query,
    // which will bring everything in at once.
    var thePerson = context.people.Include("things").Single(p => p.id == 4);
}

using (var context = new SomeContext()) {
    // This will fire two queries but will retrieve
    // the same data as the previous example
    var thePerson = context.people.Single(p => p.id == 4);
    var theStuff = thePerson.things.ToList();
}

我不认为
ToList()
会自动获取孩子们-你不是必须用
.Include()
急切地请求他们,还是在上下文仍处于活动状态时通过调用属性懒洋洋地请求他们吗?首先使用代码可能是错误的,但首先使用数据库,您只能得到您所要求的。我还相信ToList()不会单独获取子关系。在处理上下文之前,需要显式地检索它们。@Steve:我是说在子集合上。太棒了。这正是我所缺少的。谢谢你的帮助!