Answers:
有三种方法可以使模型保持同步。
从设计器中删除修改后的表,然后将它们从数据库资源管理器中拖回到设计器图面上。我发现,要使其可靠运行,您必须:
一个。在数据库资源管理器中刷新数据库架构(右键单击,刷新)
b。删除表格后保存设计器
c。向后拖动表格后再次保存。
但是请注意,如果您修改了任何属性(例如,关闭关联的child属性),则显然会丢失这些修改-您必须再次进行修改。
使用SQLMetal从数据库重新生成架构。我看过许多博客文章,这些文章显示了如何编写脚本。
直接在DBML的“属性”窗格中进行更改。这适用于简单的更改,例如允许字段为空。
默认情况下,Visual Studio 2015、2017或2019中未安装DBML设计器。您必须关闭VS,启动VS安装程序并修改安装。在LINQ到SQL工具是必须安装的功能。对于VS 2017/2019,可以在单个组件>代码工具下找到它。
要用例如添加的列更新.dbml图表中的表,请执行以下操作:
您还可以查看基于CodeSmith 的PLINQO代码生成模板集,该模板使您可以为Linq-to-SQL和使用Linq-to-SQL做很多整洁的事情:
在以下网址查看PLINQO网站:http: //www.plinqo.com 并观看介绍视频。
我知道的第二个工具是Huagati DBML / EDMX工具,该允许更新DBML(Linq-to-SQL)和EDMX(Entity Framework)映射文件,以及更多其他文件(如命名约定等)。
马克
我们使用一个自定义的书面T4模板,该模板动态查询所有.DBML文件中每个表的information_schema模型,然后使用数据库中的新架构信息覆盖.DBML文件的某些部分。我高度建议实施这样的解决方案-它节省了我很多时间,并且与删除表并在模型中重新添加表不同,您可以保留关联。使用此解决方案,您将在架构更改时遇到编译时错误。不过,您要确保使用版本控制系统,因为差异确实很方便。如果您正在使用数据库模式优先方法进行开发,那么这是一个很好的解决方案,效果很好。当然,我不能共享我公司的代码,因此您自己编写自己的代码。但是,如果您了解一些Linq-to-XML并可以上这个项目上学,那么您可以到达想要的地方。
我建议使用VS2008内置的可视设计器,因为更新dbml还会更新为您生成的代码。在可视设计器之外修改dbml会导致基础代码不同步。
先更新表再更新DBML会有细微差别。如果对现有表进行更改,则外键关系不会立即被立即移出。解决方法是构建项目,然后再次重新添加表。我向MS报告了此问题,并将其报告给VS2010。
请注意,主要答案中给出的说明不清楚。更新表
如果是存储过程更新,则应将其从.dbml文件中删除,然后再次重新插入。但是,如果存储过程具有两个路径(例如:如果有的话;显示一些列;否则显示一些其他列),请确保两个路径具有相同的列别名!!!否则,将仅存在第一个路径列。
这是对我有用的完整分步方法,用于将LINQ更新为SQL dbml和相关文件,以包括一个添加到数据库表之一的新列。
您需要按照上述其他建议对设计图面进行更改;但是,您需要执行一些额外的步骤。这些是完整的步骤:
1. Drag your updated table from Server Explorer onto the design surface
2. Copy the new column from this "new" table to the "old" table (see M463 answer for details on this step)
3. Delete the "new" table that you just dragged over
4. Click and highlight the stored procedure, then delete it
5. Drag the new stored procedure and drop into place.
6. Delete the .designer.vb file in the code-behind of the .dbml
(if you do not delete this, your code-behind containing the schema will
not update even if you rebuild and the new table field will not be included)
7. Clean and Rebuild the solution (this will rebuild the .designer.vb file to include all the new changes!).