何时重用数据上下文

时间:2013-06-14 13:33:38

标签: c# asp.net linq datacontext

我一直在阅读一些令人困惑和相互矛盾的建议。

给出以下示例方法:

using(var db = new MainContext())
{
    var q = db.tblArcadeGames;
    foreach (var game in q)
    {
        UpdateGameStats(game);
    }
}

public void UpdateGameStats(ArcadeGame game)
{
    using(var db = new MainContext())
    {
        // Do some queries and updates etc
    }
}

最初创建的数据上下文是否应作为参数传递给UpdateGameStats,如下所示:

using(var db = new MainContext())
{
    var q = db.tblArcadeGames;
    foreach (var game in q)
    {
        UpdateGameStats(game, db);
    }
}

public void UpdateGameStats(ArcadeGame game, MainContext db)
{
        // Do some queries and updates etc
}

重用数据上下文总是最佳做法吗?是否应该在每个重复使用的页面上创建一个?或者每次都应该创建一个新的?

在我看来,重用数据上下文会造成在某些情况下难以维护和模块化代码的情况。

2 个答案:

答案 0 :(得分:3)

在这个具体的例子中,我重用了数据上下文:

  1. 避免建立新上下文的开销
  2. 保持实体附加,如果您计划在页面上重复使用它们,这是很好的
  3. 关于何时处理你的情境,没有一个严格的,快速的规则。这更取决于您使用数据的方式:

    • 很少:如果您的操作很小,不经常和原子,保持上下文活动可能会比按需创建一个更多的开销/维护。只需将其放在using
    • 正常:如果您要定期更新和保存,请在每页上制作一个上下文,但让页面处理它而不是传递它。提供性能和可维护性的最佳权衡。

答案 1 :(得分:1)

只要重用实体,就应该重用数据上下文实例。由于实体附加到特定上下文,因此您应该在查询和更新之间继续使用相同的上下文。

我个人对Web应用程序的偏好是在请求期间使用单个数据上下文并将其置于EndRequest事件中。