如何更新Linq to SQL dbml文件?

时间:2009-07-10 15:18:23

标签: linq-to-sql

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

8 个答案:

答案 0 :(得分:243)

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

  1. 从设计器中删除已修改的表,然后将它们从数据库资源管理器拖回到设计器表面。我发现,为了让它可靠地工作,你必须:

    一个。在数据库资源管理器中刷新数据库模式(右键单击,刷新)
    湾删除表格后保存设计器 C。拖回表后再次保存。

    注意虽然如果您修改了任何属性(例如,关闭关联的子属性),这显然会丢失这些修改 - 您必须再次进行修改。 / p>

  2. 使用SQLMetal从数据库重新生成架构。我看过很多博客文章how to script this

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

  4. 默认情况下,Visual Studio 2015或Visual Studio 2017中未安装DBML设计器。您必须关闭VS,启动VS安装程序并修改安装。 LINQ to SQL工具是您必须安装的功能。

答案 1 :(得分:47)

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

  1. 更新SQL Server资源管理器窗口。
  2. 拖动" new"将表的版本放入.dbml-diagram(下图中的report1)。
  3. report1 is the new version of the table

    1. 在新版本的表格中标记添加的列,按 Ctrl + C 复制添加的列。
    2. copy the added columns

      1. 点击" old"您的表的版本,然后按 Ctrl + V 将添加的列粘贴到已存在的表格版本中。
      2. paste the added columns to the old version of the table

答案 2 :(得分:5)

您还可以查看基于CodeSmith的PLINQO代码生成模板集,它允许您为Linq-to-SQL做很多简洁的事情:

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

http://www.plinqo.com查看PLINQO网站并查看介绍视频。

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

马克

答案 3 :(得分:4)

我们使用自定义编写的T4模板,为我们所有.DBML文件中的每个表动态查询information_schema模型,然后使用数据库中的新模式信息覆盖部分.DBML文件。我高度建议实施这样的解决方案 - 它为我节省了大量时间,而且不像删除和重新添加表格到模型,您可以保持关联。使用此解决方案,当架构发生更改时,您将收到编译时错误。你想确保你正在使用版本控制系统,因为diffing非常方便。如果您使用数据库模式第一种方法进行开发,这是一个很好的解决方案。当然,我不能分享我公司的代码,所以你自己写这个。但是如果你知道一些Linq-to-XML并且可以去学校on this project,你可以到达你想去的地方。

答案 4 :(得分:2)

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

答案 5 :(得分:2)

更新表然后更新DBML有一些细微差别......如果对现有表进行了更改,则不会立即将外键关系全部带来。解决方法是构建项目,然后再次重新添加表。我向MS报告了此情况,并且已针对VS2010进行了修复。

DBML display does not show new foreign key constraints


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

  1. 打开dbml设计界面
  2. 选择所有正确的表格>点击 - >选择全部或 CTRL a
  3. CTRL x (剪切)
  4. CTRL v (粘贴)
  5. 保存并重建解决方案。

答案 6 :(得分:0)

如果是存储过程更新,则应将其从.dbml文件中删除,然后重新插入。但是如果存储过程有两个路径(例如:如果有东西;显示一些列;否则显示其他一些列),请确保两个路径具有相同的列别名!否则只会存在第一个路径列。

答案 7 :(得分:0)

这是对我有用的完整分步方法,用于将LINQ更新为SQL dbml和相关文件,以包括我添加到一个数据库表中的新列。

您需要按照上述其他建议对设计图面进行更改;但是,您需要执行一些额外的步骤。这些是完整的步骤:

  1. 将更新后的表从Server Explorer拖到设计图面上

  2. 将新列从此“新”表复制到“旧”表(有关此步骤的详细信息,请参阅M463答案)

  3. 删除刚刚拖动的“新”表

  4. 单击并突出显示存储过程,然后将其删除

  5. 将新的存储过程拖放到适当的位置。

  6. 在.dbml的代码隐藏中删除.designer.vb文件 (如果您不删除此代码,则包含该模式的后台代码将 即使您重建也不会更新,并且不会包含新表格字段)

  7. 清理并重建解决方案(这将重建.designer.vb文件以包括所有新更改!)。