首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq多个.DBML文件或一个.DBML文件

Linq多个.DBML文件或一个.DBML文件
EN

Stack Overflow用户
提问于 2010-02-23 13:47:14
回答 4查看 7.3K关注 0票数 29

我正在使用ASP.NET 3.5开发一个web应用程序。应用程序有数百个表。在一次研讨会上,我被告知,我应该为整个应用程序使用一个.DBML文件,而不是使用多个.DBML文件(堆栈溢出中也有一篇文章说了同样的话)。考虑到我有这么多表,那么使用一个.DBML文件是有意义的,还是创建逻辑分组的多个.DBML文件更好呢?

例如,我正在考虑创建以下.DBML文件:

  • Customer
  • Vendor
  • Employee
  • Sales Order

我在使用多个.DBML文件时所关心的问题之一是如何处理跨.DBML文件的更新。例如,当输入新的销售订单时,如果必须更新customer表上的字段。我该怎么处理呢?我当然不想将customer表包括在Customer和Sales .DBML文件中。我能用TransactionScope包装这些操作吗?

我不知道以下内容是否对答案有任何影响,但我的计划是使用存储库模式和POCO类,以便对.DBML文件中的表定义的引用对我的数据访问层是本地的。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-23 13:55:05

我必须建议您对所有表使用ONE dbml文件。

如果您正在尝试join two tables from different data contexts,它会使您的代码变得更加复杂。这可以由simulating cross context joins来完成,但是为什么要把自己放在那种情况下呢?保持简单愚蠢。

另外,如果您确实决定使用2个或更多的dbml文件,并且错误地将相同的表添加到多个数据上下文中,那么您将得到一个"This member is defined more than once” error

票数 11
EN

Stack Overflow用户

发布于 2010-02-23 14:31:41

我做过一个项目,如果团队决定将域分离到四个不同的DBML文件中。出现这种情况的主要原因与LINQ设计器有关。这位设计师的设计并不适合用于大域名。

这四个“子域”在这个项目是合理地分开,但有一些重叠和这位我们一直。有了这种经验,我建议您在每个域使用一个DBML文件。通常每个数据库都有一个域,因此这意味着每个数据库有一个DBML文件。

就个人而言,我反对在生产代码中使用TransactionScope (但我一直将它用于集成测试),但这是另一种讨论。但是,当您决定使用多个DBML文件,并有一个需要创建多个DataContext类的用例时,您可以在同一个事务中运行它们,如下所示:

代码语言:javascript
复制
using (var con = new SqlConnection("constr"))
{
    con.Open();
    using (var tran = con.BeginTransaction())
    {
        using (var context = new CustomerDataContext(con))
        {
            // do some work with it
            context.SubmitChanges();
        }

        using (var context = new VendorDataContext(con))
        {
            // do some work with it
            context.SubmitChanges();
        }
    }
}

这是我大多数时候使用的模型,即使只有一个DataContext。但是,连接和事务的创建是抽象的,因此在代码中只有一个地方进行事务处理。

票数 6
EN

Stack Overflow用户

发布于 2010-02-23 15:58:30

我有一个相当大的项目,大约有200个表,它在一个数据上下文中工作得很好;因为所有的数据都是相当相互关联的(设计在第二和第三种范式之间),使用多个数据上下文将是一件痛苦的事。

在应用程序需要对被拆分的表执行查询的区域,多个上下文问题并不有趣;由于LINQ的工作方式和向下钻取的层次结构,您必须确保某些表处于单独的数据上下文中。至少从方便的角度来看,这并不是不可能做到的。

HTH。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2318536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档