书呆子晚餐模型是否使用最佳实践来处理物体?

时间:2009-11-20 16:56:41

标签: c# asp.net-mvc linq nerddinner

我一直在查看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代码,我知道

2 个答案:

答案 0 :(得分:4)

事实证明,在典型的应用程序中,处理DataContext对象通常不是您想要做的事情。

请参阅http://mostlytech.blogspot.com/2008/01/linq-datacontextdispose.html(当然是Jon Skeet),了解更多细节。

答案 1 :(得分:0)

在这种情况下,这是最佳做法。存储库返回一个IQueryable对象...这意味着查询的处理将被延迟,直到需要结果。

如果丢弃存储库中的上下文,当调用代码尝试从IQueryable对象检索结果时,将不会有任何DataContext。