我正在尝试制定有关如何组织DataContexts的最佳策略。我们工作的典型数据库有50到100个表,通常采用第三范式,并且它们之间有很多关系。我认为我们有两种选择:
有没有推荐的做法来处理这个问题?
更多详情:
我想在LINQ to SQL之上创建自己的实体和工作单元。实体将在xml模型文件中定义,其中还将指定到LINQ实体的映射。自定义工具将根据模型生成我的实体(POCO)。客户端代码只与我的实体和我的工作单元进行交互;从不直接使用DataContext或LINQ实体。但是我不想复制LINQ to SQL提供的开箱即用,所以我想使用底层的LINQ DataContext。这意味着我不能在不同的数据上下文中有两个订单,因为无法将我的POCO订单映射到它们两个。
答案 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