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