在MVC中使用DBContext的语句

时间:2013-06-27 15:04:46

标签: asp.net asp.net-mvc entity-framework

我正在使用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语句中创建我的上下文。处理这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

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