关于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


    推荐阅读

      linux数据库同步命令?

      linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

      linux命令模式全屏?

      linux命令模式全屏?,系统,工具,电脑,数据,位置,命令,虚拟机,分辨率,字符串,

      linux命令创建项目组?

      linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文

      linux中回到命令模式?

      linux中回到命令模式?,系统,密码,情况,状态,终端,环境,信息,首页,界面,命令,

      linux怎么用命令模式?

      linux怎么用命令模式?,工作,地址,系统,信息,管理,命令,目录,情况,图形界面,

      复制项目的linux命令?

      复制项目的linux命令?,系统,项目,文件,命令,目录,源文件,语法,选项,目标,功

      linux命令进数据库?

      linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,

      linux插入命令模式?

      linux插入命令模式?,工作,系统,地址,管理,信息,时间,命令,目录,平均,项目,Lin

      命令行模式登陆linux?

      命令行模式登陆linux?,密码,系统,工作,信息,终端,环境,状态,地址,工具,服务,l

      linux打开命令模式?

      linux打开命令模式?,系统,密码,管理,情况,终端,命令,工具,信息,地方,电脑,LIN

      linux命令项目部署?

      linux命令项目部署?,项目,服务,环境,软件,系统,代理,管理,统一,做好,业务,怎

      linux纯命令模式切换?

      linux纯命令模式切换?,系统,密码,状态,电脑,网络,信息,模式,命令,情况,地方,L

      linux数据库检查命令?

      linux数据库检查命令?,服务,状态,地址,位置,系统,信息,命令,工作,情况,密码,

      linux部署项目的命令?

      linux部署项目的命令?,项目,系统,设备,环境,工作,基础,传播,信息,标准,代码,L

      linux项目常用命令?

      linux项目常用命令?,工作,地址,系统,信息,管理,项目,命令,目录,标准,网络,lin

      linux命令进去数据库?

      linux命令进去数据库?,地址,服务,名字,系统,数据库,工具,基础,工作,管理,网

      linux项目更新命令?

      linux项目更新命令?,系统,信息,网络,地址,网站,通信,管理,时间,项目,命令,lin

      linux数据库基础命令?

      linux数据库基础命令?,地址,工作,基础,系统,命令,信息,情况,工具,设备,目录,l

      linux命令底行模式?

      linux命令底行模式?,系统,地址,工作,命令,管理,时间,信息,模式,控制台,图形

      启动项目命令linux?

      启动项目命令linux?,工作,经理,产品,技术,地址,数字,系统,项目,命令,信息,怎