【问题标题】:Best way to update LINQ to SQL classes after database schema change数据库架构更改后更新 LINQ to SQL 类的最佳方法
【发布时间】:2008-09-02 16:54:55
【问题描述】:

我正在一个项目中使用 LINQ to SQL 类,而该项目的数据库设计仍处于变动之中。

是否有一种简单的方法可以将类与架构同步,或者如果表设计发生变化,我是否需要手动更新类?

【问题讨论】:

标签: c# .net linq-to-sql


【解决方案1】:

您可以使用 SQLMetal.exe 来生成您的 dbml 和/或 cs/vb 文件。使用预构建脚本启动它并定位您的数据上下文项目所属的目录。

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sqlmetal.exe 
  /server:<SERVER> 
  /database:<database> 
  /code:"path\Solution\DataContextProject\dbContext.cs" 
  /language:csharp 
  /namespace:<your namespace>

【讨论】:

  • 这太棒了!我想我只需要将所有内容重新拖入 dbml。
  • 不幸的是,没有选项可以仅过滤所需的表/sprocs/schemas...
  • 我创建了一个实用程序来帮助过滤。它使您可以选择要排除的表,还可以选择要对非 pk 列进行 updatecheck.never 的表。如果有人想要源代码,请告诉我。
【解决方案2】:

我自己没试过,但是Huagati DBML/EDMX Tools是别人推荐的。

Huagati DBML/EDMX Tools 是一个插件 为 Visual Studio 添加 Linq2SQL/DBML 的功能 Visual Studio 中的图表设计器 2008 年,ADO.NET 实体 Visual Studio 中的框架设计器 2008 年 SP1。加载项添加新菜单 更新 Linq2SQL 设计器的选项 带有数据库更改的图表,对于 重命名 Linq-to-SQL (DBML) 和 EF (EDMX) 要使用的类和属性 .net 命名约定,以及 添加文档/描述到 Linq-to-SQL 生成的类来自 数据库属性。

【讨论】:

  • 仅供参考 - 该网站提供 30 次免费试用,单用户许可费略高于 100 美元。
  • 更正,199 美元和功能有限的试用版。不确定是否值得。
【解决方案3】:

这是一个简单的修复方法,无需任何额外的软件,只适用于简单的更改(如添加的字段、少量表格等)。

说明:

  • 您将更改后的表的副本拉入设计器(稍后将被删除)
  • 现在选择所有新的(或更改的)字段和(right-click -&gt;copy
  • 在原始表格中右键单击并insert它们(首先删除更改的字段)
  • 现在删除您从中复制它们的表

我知道这有点明显,但不知何故不直观,它对我帮助很大,因为所有正确的属性和类型都将被复制,并且所有链接都保持不变。希望对您有所帮助。

何时使用:

当然,如前所述,它适用于小的更改,但肯定比手动替换具有许多链接的表更好,或者当您不希望 SQLMetal 生成整个数据库结构时。例如,当您有大量表(例如 SAP)时,或者当使用来自不同数据库的交叉链接表时。

【讨论】:

    【解决方案4】:

    DamienG 写了一些 t4 templates 可以替换 VS 为您生成的一些内容。这些可以随时通过命令行工具重新运行。

    T4 模板具有可编辑的额外好处。这使您可以调整生成的内容。

    【讨论】:

      【解决方案5】:

      我认为 Jeff 最近对此有所抱怨。一种常见的技术是再次将所有对象拖到设计器中......

      我希望其他人能提出更好的方法!

      【讨论】:

      • 这就是我们正在做的事情......而且它开始变得非常烦人! :-)
      【解决方案6】:

      我编写了一个工具来对 Dbml 脚本进行脚本更改,请参阅 http://code.google.com/p/linqtodbmlrunner/ 和我的博客 http://www.adverseconditionals.com

      【讨论】:

        【解决方案7】:

        如何在 Visual Studio 中修改 DataContext 设计图面中的实体/表的属性?

        例如,如果我在 SQL Server 表中添加一列:

        1. 打开 *.dbml 文件。
        2. 右键单击实体并选择添加 > 属性。
        3. 在“属性”窗口中为新列填写值。
        4. 构建您的解决方案。

        自动生成的模型类应该反映添加的新列。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-14
          • 2011-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-17
          相关资源
          最近更新 更多