我一直在查看Nerd Dinner代码,他们在模型中做的一件事就是创建一个DataContext实例,如下所示:
public class DinnerRepository {
private NerdDinnerDataContext db = new NerdDinnerDataContext();
public IQueryable<Dinner> FindUpcomingDinners() {
return from dinner in db.Dinners
where dinner.EventDate > DateTime.Now
orderby dinner.EventDate
select dinner;
}
// more methods below
}
这些在控制器中使用如下:
public class DinnersController : Controller {
DinnerRepository dinnerRepository = new DinnerRepository();
public ActionResult Index() {
var dinners = dinnerRepository.FindUpcomingDinners().ToList();
return View("Index", dinners);
}
}
但似乎NerdDinnerDataContext似乎没有被处理掉。这是一个我应该担心的问题吗?或者这种模式好吗?
注意:不是最新的Nerd Dinner代码,我知道
答案 0 :(得分:4)
事实证明,在典型的应用程序中,处理DataContext对象通常不是您想要做的事情。
请参阅http://mostlytech.blogspot.com/2008/01/linq-datacontextdispose.html(当然是Jon Skeet),了解更多细节。
答案 1 :(得分:0)
在这种情况下,这是最佳做法。存储库返回一个IQueryable对象...这意味着查询的处理将被延迟,直到需要结果。
如果丢弃存储库中的上下文,当调用代码尝试从IQueryable对象检索结果时,将不会有任何DataContext。