LINQ to SQL多个DataContext-s

时间:2008-10-24 14:23:31

标签: sql linq linq-to-sql datacontext

我正在尝试制定有关如何组织DataContexts的最佳策略。我们工作的典型数据库有50到100个表,通常采用第三范式,并且它们之间有很多关系。我认为我们有两种选择:

  1. 将所有表放在一个上下文中。这将确保我们所做的任何事情都将以正确的顺序提交到数据库中。问题是LINQ设计师将会有50多个表格,我担心性能可能会受到影响。
  2. 根据表的逻辑分组创建多个数据上下文。问题在于,将存在关系的一侧将在一个上下文中而另一侧在另一个上下文中的位置。我们必须手动处理以正确的顺序提交两个上下文。
  3. 有没有推荐的做法来处理这个问题?

    更多详情:

    我想在LINQ to SQL之上创建自己的实体和工作单元。实体将在xml模型文件中定义,其中还将指定到LINQ实体的映射。自定义工具将根据模型生成我的实体(POCO)。客户端代码只与我的实体和我的工作单元进行交互;从不直接使用DataContext或LINQ实体。但是我不想复制LINQ to SQL提供的开箱即用,所以我想使用底层的LINQ DataContext。这意味着我不能在不同的数据上下文中有两个订单,因为无法将我的POCO订单映射到它们两个。

4 个答案:

答案 0 :(得分:4)

这是一个在此处进行了彻底分析的常见问题:http://craftycode.wordpress.com/2010/07/19/linq-to-sql-single-data-context-or-multiple/

实际上,每个强连接的表组最多只能创建一个数据上下文,或者每个数据库创建一个数据上下文。

答案 1 :(得分:2)

LINQ-to-SQL映射类似于类型化的DataSet,因为当您使用它时,您正在处理包含数据的会话。您可以在几个不同的DataContexts中使用相同的表。毕竟,他们只是班级;在您开始与数据库交互之前,通过填充现有数据或使用它们来创建新数据,它们没有任何意义。

因此,当您发送新目录时,可能还有客户,地址,电话等表格。然后,您可以在创建订单时使用发票,行项目,产品等表格。但在后一组中,您可能也希望拥有客户。没关系。您应该注意一次只激活一个会话,这样您就不会使用不一致的数据。只要您没有以重叠方式使用它们,就不应该在各种DataContexts中重叠实体时出现问题。

就杂乱而言,您可以将DataContext放在特定的命名空间中,也可以将各种实体放在特定的命名空间中(尽管DataContext中每组实体只有一个命名空间)。您可以在“属性”窗口中执行此操作。这样可以让您更好地避免智能感知。

答案 2 :(得分:0)

您应该创建允许您执行工作单元的上下文。这可能涉及重叠表映射。

Context1:客户有很多发票

Context2:客户有许多订单

Context3:发票有很多订单

答案 3 :(得分:0)

每个数据库使用一个datacontext。

平均表格最多可达100,但根据经验,我不会遇到任何性能问题。

datacontext位于一个单独的项目中,该项目已编译完成。由BLL引用的结果dll