我如何更新一个Linq到SQL DBML文件?

如何更新Linq到SQL .dbml文件?

有三种方法保持模型同步。

  1. 从devise器中删除修改后的表格,然后将其从数据库浏览器拖回devise器表面。 我发现,为了这个工作可靠,你必须:

    1. 刷新数据库资源pipe理器中的数据库模式(右键单击,刷新)
    2. 删除表后保存devise器
    3. 拖回表格后再保存。

    请注意 ,如果您修改了任何属性(例如closures关联的子属性),那么显然将会失去这些修改 – 您必须重新创build它们。

  2. 使用SQLMetal从数据库重新生成模式。 我已经看到了许多博客文章,显示如何编写脚本 。

  3. 直接在DBML的“属性”窗格中进行更改。 这适用于简单的更改,如允许在域上的空值。

要使用例如添加的列更新.dbml图中的表,请执行以下操作:

  1. 更新您的SQL Server资源pipe理器窗口。
  2. 将表格的“新”版本拖到.dbml图表中(下图中的report1)。

report1是表格的新版本

  1. 在新版表格中标记添加的列,按Ctrl + C复制添加的列。

复制添加的列

  1. 单击表格的“旧”版本,然后按Ctrl + V将添加的列粘贴到表格的现有版本中。

将添加的列粘贴到旧版本的表中

您还可以查看基于CodeSmith的PLINQO代码生成模板集,这使您可以为Linq-to-SQL做很多精巧的事情:

  • 为每个类生成一个文件(而不是一个巨大的文件)
  • 根据需要更新您的模型
  • 更多的function

请访问http://www.plinqo.com查看PLINQO网站,并查看介绍video。;

我所知道的第二个工具是Huagati DBML / EDMX工具 ,它允许更新DBML(Linq-to-SQL)和EDMX(entity framework)映射文件等(比如命名约定等)。

渣子

我们使用自定义的书面T4模板,dynamic查询所有.DBML文件中每个表的information_schema模型,然后用数据库中新的模式信息覆盖部分.DBML文件。 我强烈build议实施这样的解决scheme – 它节省了我很多的时间,而不像删除和重新添加表格到你的模型,你可以保持你的关联。 有了这个解决scheme,当模式改变时,你会得到编译时错误。 你要确保你使用的是版本控制系统,因为差异是非常方便的。 如果您使用数据库模式优先方法进行开发,这是一个很好的解决scheme。 当然,我不能分享我公司的代码,所以你自己写这个。 但是如果你知道一些Linq-to-XML并且可以在这个项目上学,你可以到达你想要的地方。

我build议使用内置于VS2008的可视化devise器,因为更新dbml也会更新为您生成的代码。 在可视化devise器之外修改dbml会导致底层代码不同步。

在更新表格和更新DBML方面存在细微差别。如果对现有表格进行更改,则不会立即引用外键关系。 解决方法是做一个项目的构build,然后再重新添加表。 我向MS汇报了这个问题,并将其修正为VS2010。

DBML显示不显示新的外键约束


请注意主要答案中给出的说明不清楚。 更新表格

  1. 打开dbmldevise表面
  2. 用右键 – >点击 – >全选或CTRL aselect所有表格
  3. CTRL x (剪切)
  4. CTRL v (粘贴)
  5. 保存并重build解决scheme。

在存储过程更新的情况下,您应该从.dbml文件中将其删除并重新插入。 但是,如果存储过程有两个path(例如:如果有的话;显示一些列;否则显示其他列),确保两个path具有相同的列别名! 否则,只有第一个path列将存在。