代码之家  ›  专栏  ›  技术社区  ›  Mark Brittingham

Linq to SQL:每个页面都有一个小的DataContext好还是一个全局的好?

  •  9
  • Mark Brittingham  · 技术社区  · 16 年前

    我正在ASP.NET应用程序中试用Linq to SQL,该应用程序使用一个包含大量外键(100多个表)的大型数据库。我对Linq如何允许您创建一个保持所有关系完整的datacontext,然后创建自动连接表的Linq语句印象深刻。但是,这导致了一个问题:如果我提交的Linq语句仅适用于一个或两个表,那么使用一个只包含必要表的datacontext是否更好?在我看来,如果我用数据库中的所有表构建一个datacontext,它将非常庞大,并且每次使用Linq时加载它都会对性能产生负面影响。我说得对吗?

    注释:我知道只在需要时创建datacontext(但是感谢您的提及)。问题是我是否应该有很多小的数据上下文,或者是否可以构建一个大的数据上下文。

    4 回复  |  直到 16 年前
        1
  •  8
  •   Sander    16 年前

    有联系的 可以 需要跨数据上下文进行查询,不要将它们分开。

    但是请注意,DataContext应该是短期的——它们是工作单元模式的实现,因此它们的生命周期应该等于一个逻辑操作(例如加载一组产品或插入一个新订单)。数据上下文的创建和销毁成本很低,所以不要因为需要而浪费时间缓存它们。

        3
  •  2
  •   tvanfosson    16 年前

    我相信数据上下文是非常轻量级的,主要是容器。在查询数据之前,数据不会实际加载到上下文中。我不认为拥有一个单一的数据上下文是错误的,而只是根据需要(作为一个工作单元)实例化它,而不是一直保持它。这样,你就不会有一个长寿命的物体会继续变得越来越大。

    如果您的表可以被划分为相关的表组,那么您可能需要考虑为这些组中的每一个拥有单独的数据上下文。我不确定LINQ将如何使用来自多个上下文的数据处理查询,但似乎只要表位于同一服务器上,它就应该工作。如果确实将内容分解为多个上下文,并且查询需要来自多个上下文的表,则必须检查此项。

        4
  •  2
  •   msigman    14 年前

    我在我们的数据库上做了一个测试,它有大约600个表。首先,我将它们分为9个离散的数据上下文,每个上下文都非常易于管理。然后,我编写了一个脚本,对其中一个进行了数百次选择、更新和删除(在每次访问之后都处理datacontext,这样LINQ就必须为每次访问重新创建datacontext)。

    然后我制作了另一个datacontext,上面有所有600个表,并运行了相同的测试。