76

我在一个项目中使用 LINQ to SQL 类,其中数据库设计仍然有点变化。

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

4

7 回答 7

65

您可以使用 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>
于 2008-09-02T16:58:28.633 回答
17

我自己没有尝试过,但是其他人推荐了Huagati DBML/EDMX Tools 。

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

DBML 工具的屏幕截图

于 2008-09-02T16:59:41.873 回答
9

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

指示:

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

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

何时使用:

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

于 2014-02-03T15:51:37.877 回答
5

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

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

于 2008-10-21T12:56:46.710 回答
4

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

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

于 2008-09-02T16:56:58.403 回答
1

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

于 2008-11-28T18:21:39.347 回答
0

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

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

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

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

在此处输入图像描述

在此处输入图像描述

于 2017-06-26T22:32:47.897 回答