【问题标题】:How to create a LINQ To SQL datacontext for large DB using SQLMetal when it generates a 12MB DataContext.cs file?如何在生成 12MB DataContext.cs 文件时使用 SQLMetal 为大型数据库创建 LINQ To SQL 数据上下文?
【发布时间】:2011-04-09 22:14:26
【问题描述】:

我的问题是这样的:

我们有一个非常大的 Legacy DB,其中包含许多 SPROC、视图和表。

设计师是一个“不适合”的大小的 b/c。

我已配置 SQL Metal 来构建数据上下文,但生成的代码文件太大 (12MB),Visual Studio 2008 无法打开它。

如果 SQLMetal 会为每个类类型(表、视图、SPROC_Result)生成一个新文件,我会没事的。

但由于它目前有效,我被水洗了。

想法??

【问题讨论】:

    标签: linq linq-to-sql sqlmetal


    【解决方案1】:

    你可以这样做:

    1. 运行 SQLMetal.exe 以创建 .dbml 文件。
    2. 创建一个小脚本或应用程序来将 .dbml 文件(即 XML)解析为 3 个组件:表、存储过程和视图
    3. 对每个新的 .dbml 文件运行 SQLMetal.exe 以创建 3 个单独的 .cs 文件。

    在您的过滤阶段(第 2 步),您还可以根据其他要求创建 .dbml 文件的其他任意分区。也许过滤掉一些不必要的表或视图。或者将表格分解为具有单独 DataContexts 的逻辑组件。

    【讨论】:

    • 我这样做了...创建一个小脚本文件是不合理的。此外,SQL Designer 和 SQL Metal 之间存在一些微不足道但令人痛苦的区别(southernbits.com/index.php/2009/05/25/…" /> 请参阅此博客条目)
    【解决方案2】:

    原来有很多方法可以做到这一点:

    1) 构建自己的(对我来说是 1 周:DBML 上帝)http://southernbits.com/index.php/2009/05/16/dbml-hell-legacy-db-sqlmetal-is-painful-when-migrating-from-sql-designer/

    2) 使用现有工具(这可能有效,但我尚未完全探索)http://www.plinqo.com/

    3) 注意 SQLMetal 和 SQL Designer 之间的差异。见博客:http://southernbits.com/index.php/2009/05/25/unfortunate-differences-between-linq-sqlmetal-and-sqldesigner/

    最后,这花了我 1 周的时间探索(我没有发现 plinqo)。简单的解决方案并没有出现。考虑到 SQLMetal 和 SQLDesigner 之间的差异,我花了 1.5 周的时间来构建一个工具(DBMLGod),又花了 1 周的时间来重构/编译代码)。测试时间待定...

    如果您没有拥有使用 SQL 设计器构建的大型代码库,那么您可能不会遇到那么多问题。

    我认为所有大型、凌乱的数据库(使用大量复杂的存储过程并拥有大量对象)都会很痛苦。

    在 QuadCore 4GB 开发盒上,我们数据库的 SQL 生成时间是 15 分钟(哎呀)。

    【讨论】:

      【解决方案3】:

      刚刚确定 Resharper 在非常大的 DataContext.cs 文件上使 VisualStudio 崩溃。但是Keltex的建议是非常好的。

      【讨论】:

        【解决方案4】:

        我们正在使用http://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html

        然后,您可以在 .tt 模板中将数据上下文拆分为单独的类文件,事实上,您喜欢它,它为扩展代码提供了充足的机会,并且有一个可以满足基本需求的免费版本。

        问候

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-03
          • 1970-01-01
          • 2019-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多