2

我将 ASP.NET MVC 4.5 与 Entity Framework 一起使用,我正在阅读的所有内容都表明我的数据库上下文应该包含在 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; }
}

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

4

2 回答 2

3

您可以在上下文仍处于打开状态时检索子项。您可以急切地或懒惰地这样做:

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();
}
于 2013-06-27T15:28:12.503 回答
0

您应该ToList()在块内设置 ViewModel 时调用子集合using以在释放上下文之前获取子关系。

于 2013-06-27T15:08:17.503 回答