关于c#:在数据库模式更改后更新LINQ to SQL类的最佳方法

Best way to update LINQ to SQL classes after database schema change

我正在一个项目中使用LINQ to SQL类,数据库设计仍处于不断变化之中。

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


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

1
2
3
4
5
6
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>

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

Huagati DBML/EDMX Tools is an add-in
for Visual Studio that adds
functionality to the Linq2SQL/DBML
diagram designer in Visual Studio
2008, and to the ADO.NET Entity
Framework designer in Visual Studio
2008 SP1. The add-in adds new menu
options for updating Linq2SQL designer
diagrams with database changes, for
renaming Linq-to-SQL (DBML) and EF
(EDMX) classes and properties to use
.net naming conventions, and for
adding documentation/descriptions to
Linq-to-SQL generated classes from the
database properties.

Screenshot of DBML Tools


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

说明:

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

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

何时使用:

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


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

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


我想杰夫最近抱怨这件事。一种常见的技术是将所有对象再次拖动到设计器中...

我希望其他人能够采用更好的方法!


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


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

例如,如果我向SQL Server表添加了一列:

  • 打开* .dbml文件。
  • 右键单击该实体,然后选择添加>属性。
  • 在"属性"窗口中填写新列的值。
  • 构建您的解决方案
  • 自动生成的模型类应反映添加的新列。

    enter image description here

    enter image description here


    推荐阅读