4

我一直在查看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 从未被处置。这是我应该担心的问题吗?或者这个模式可以吗?

注意:不是最新的书呆子晚餐代码,我知道

4

2 回答 2

4

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

有关更多详细信息,请参见http://mostlytech.blogspot.com/2008/01/linq-datacontextdispose.html (当然是 Jon Skeet)。

于 2009-11-20T17:02:17.457 回答
0

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

如果您在 Repository 中处理上下文,当调用代码尝试从 IQueryable 对象检索结果时,将不会留下任何 DataContext。

于 2009-11-20T17:00:46.383 回答