2008-10-24 243 views
11

我在想如何组织DataContexts的最佳策略。我们工作的典型DB有50到100个表格,通常以第三范式形式存在,并且它们之间有许多关系。我认为我们有两种选择:LINQ to SQL多个DataContext-s

  1. 将所有表放在一个上下文中。这将确保我们所做的任何事情都将以正确的顺序在数据库中提交。问题在于,LINQ设计人员会对50多张表格造成混乱,我担心性能可能会受到影响。
  2. 根据表的逻辑分组创建多个数据上下文。问题在于,会有一些关系的一方在一个环境中,另一方在另一个环境中。我们必须手动处理以正确的顺序提交两个上下文。

有没有建议的做法来解决这个问题?

更多细节:

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

回答

0

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

CONTEXT1:客户有许多发票

上下文2:客户有很多订单

上下文3:发票有很多订单

+0

虽然这样,但是Context2中的订单无法在Context3中使用....您将以两个不同的订单实体结束 – Albert 2008-10-24 14:32:11

+0

如果工作分离为单位,您绝不会尝试使用对象来自context3中的context2。 – 2008-10-24 14:32:41

2

LINQ到SQL的映射像类型数据集,因为当你使用一,你正在处理包含数据的会话。您可以在几个不同的DataContext中拥有相同的表。毕竟他们只是阶级;在开始与数据库交互之前,它们并不意味着什么,通过填充现有数据或使用它们来创建新数据。

因此,当您发送新目录时,您可能拥有客户,地址,电话等表格。然后,您将创建订单时使用的发票,订单项,产品等表格。但是在后一组中,您可能也希望拥有客户。没关系。您应该小心一次只有一个会话处于活动状态,以便您不使用不一致的数据。只要你没有以重叠的方式使用它们,你不应该在各种DataContext中重叠实体

至于混乱,你可以把你的DataContext放在一个特定的命名空间,你也可以把你的各种实体放在一个特定的命名空间(尽管每个实体在DataContext中只有一个命名空间)。您可以在“属性”窗口中执行此操作。这会让你保持Intellisense的混乱。

0

我对每个数据库使用一个datacontext。

平均表可以达到100,但从经验我没有遇到任何性能问题。

datacontext位于编译的单独项目中。从BLL