【问题标题】:Linq to SQL and large DB modelLinq to SQL 和大型数据库模型
【发布时间】:2008-11-08 18:04:26
【问题描述】:

首先,我是Linq to Sql新手,所以请温柔:)。

我有过去 3.5 年开发的现有 ASP.Net 应用程序。它下面有相当大的数据模型,大约 350 个表。我正在尝试用 Linq to SQL 做一些新的事情。

第一印象是 linq 设计器和 SqlMetal 是为不大于 NorthWind 示例的数据库构建的。以下是我遇到的一些问题:

  1. 我有很多地方都需要的表Products(库存、开票、生产……)。如果我将表 Products 放在每个 dbml 文件中,linq 设计器将在每个文件中创建 Product 类。我不想要那个。我只想要一个Product 课程。
  2. 我有关于运输的 DataContext。它需要大约 40 张桌子。这使得 dbml 文件很难管理。有没有办法创建更小的 dbml 文件,然后将它们(作为参考)包含到一些“主要”dbml 中?

目前,我真的很喜欢 Linq,但我认为它仍然严重缺乏超过 10 个表的设计工具。

我现在的解决方案是使用 Linq 设计器构建更小的模型,然后手动合并它们(添加属性和引用),因此会生成大量代码,但也会有大量手动工作。

我是否错过了一些重要的事情,或者是 Linq to Sql 的当前状态?

【问题讨论】:

  • 我没有答案,但我也有兴趣知道这一点,因为我注意到了同样的事情。您使用的方法是我认为如果我有很多表我也会这样做的。
  • 我不明白为什么 SqlMetal 不是您问题的答案?它适用于大型多表数据库。我刚刚将一个批处理脚本连接到 Visual Studio 中的“外部工具”菜单,这样我就可以一键重建 ORM。
  • @James McCormack:您能否添加答案并描述您如何组织课程。我想要的是有装配库存和一些 20-30 类对应于相同数量的表。然后是组装销售,然后是财务。我没有找到简单的方法来自动化这个,所以我求助于这个:为少量表创建 dbml,然后手动编辑代码。你知道 .Net4 的 SqlMetal 是否有所改进?

标签: linq-to-sql


【解决方案1】:

好吧,我的解决方案是使用 SQLMetal 的 /code 选项在 .cs 文件而不是 DBML 文件中创建普通类,并在单独的文件中使用部分类来扩展生成的 ORM 类。

我知道这并不能解决您将数据库的各个部分拆分为不同的 ORM 程序集的问题 - 我只是发现没有 DBML / Designer 的头痛,管理 .cs 文件中的大量类不是太糟糕了。

【讨论】:

    【解决方案2】:

    为什么需要多个 dbml 文件?只需将它们全部合二为一。这就是它的工作原理。

    【讨论】:

    • 我认为问题之一是当您开始添加大量数据库时,设计器开始变得无法使用。
    • 您是否尝试将 350 个表放在一个 dbml 中?
    • 一体机适合小型模特。但是,拥有模型图的目的是获得概览。将模型划分为多个主题区域便于概览,单个 300 表模型无法概览。
    【解决方案3】:

    你在 MSDN 上看到过这篇文章吗?

    http://msdn.microsoft.com/en-us/library/bb387007.aspx

    似乎有一个命令行工具可以在不使用 VS.net 中的可视化设计器的情况下生成对象模型。

    【讨论】:

    • 那将是 OP 提到的 SqlMetal。
    • 好吧,我不确定,因为这篇文章提到了 SQL Metal 代码生成器:“最好使用这个工具来建模大型数据库。”
    【解决方案4】:

    如果我是你,我会使用 Entity Framework,因为这是 MS 推荐的 ORM Microsoft kills Linq to SQL

    【讨论】:

    • 我认为这不能回答问题,我认为当我们谈论尝试在单个 EF 文件或较小的文件组中对 350 个表进行建模时,EF 具有相同的缺点。
    • EF 设计者在处理大型模型方面更差。两位设计师都需要一种“分页”方法,允许将模型分成小的、可消化的视图。或拆分/合并功能,允许将许多小型设计器模型合并到单个对象模型中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多