【发布时间】:2010-11-09 18:11:20
【问题描述】:
如何更新 Linq to SQL .dbml 文件?
【问题讨论】:
标签: linq-to-sql
如何更新 Linq to SQL .dbml 文件?
【问题讨论】:
标签: linq-to-sql
有三种方法可以使模型保持同步。
从设计器中删除修改后的表,然后从数据库资源管理器将它们拖回设计器界面。我发现,要使其可靠地工作,您必须:
一个。在数据库资源管理器中刷新数据库架构(右键单击、刷新)
湾。删除表后保存设计器
C。将表格拖回来后再次保存。
注意尽管如果您修改了任何属性(例如,关闭关联的子属性),这显然会丢失这些修改 - 您必须再次进行修改。
使用 SQLMetal 从数据库重新生成架构。我看过许多显示how to script this 的博客文章。
直接在 DBML 的“属性”窗格中进行更改。这适用于简单的更改,例如允许字段为空。
默认情况下,Visual Studio 2015、2017 或 2019 中未安装 DBML 设计器。您必须关闭 VS,启动 VS 安装程序并修改您的安装。 LINQ to SQL 工具 是您必须安装的功能。对于 VS 2017/2019,您可以在 Individual Components > Code Tools 下找到它。
【讨论】:
【讨论】:
您还可以查看基于 CodeSmith 的 PLINQO 代码生成模板集,它允许您为 Linq-to-SQL 做很多巧妙的事情:
查看 PLINQO 网站http://www.plinqo.com 并观看介绍视频。
我知道的第二个工具是Huagati DBML/EDMX tools,它允许更新 DBML(Linq-to-SQL)和 EDMX(实体框架)映射文件,以及更多(如命名约定等)。
马克
【讨论】:
我们使用自定义编写的 T4 模板动态查询所有 .DBML 文件中每个表的 information_schema 模型,然后用数据库中的新模式信息覆盖 .DBML 文件的部分内容。我强烈建议实施这样的解决方案 - 它为我节省了大量时间,并且与删除表格并将其重新添加到模型中不同,您可以保持关联。使用此解决方案,您将在架构更改时收到编译时错误。不过,您要确保您使用的是版本控制系统,因为差异非常方便。如果您使用 DB 模式优先方法进行开发,这是一个很好的解决方案。当然,我不能分享我公司的代码,所以你自己写这个。但是如果你知道一些 Linq-to-XML 并且可以去学校on this project,你可以去你想去的地方。
【讨论】:
我建议使用 VS2008 中内置的可视化设计器,因为更新 dbml 也会更新为您生成的代码。在可视化设计器之外修改 dbml 会导致底层代码不同步。
【讨论】:
更新表然后更新 DBML 存在细微差别......如果对现有表进行更改,外键关系并不总是立即带来。解决方法是构建项目,然后再次重新添加表。我向 MS 报告了此问题,并且已针对 VS2010 进行了修复。
DBML display does not show new foreign key constraints
请注意,主要答案中给出的说明并不明确。更新表格
【讨论】:
在存储过程更新的情况下,您应该将其从 .dbml 文件中删除并重新插入。但是如果存储过程有两个路径(例如:如果某事;显示一些列;否则显示一些其他列),请确保这两个路径具有相同的列别名!!!否则只会存在第一个路径列。
【讨论】:
这是对我有用的完整分步方法,用于更新 LINQ to SQL dbml 和关联文件以包含我添加到其中一个数据库表中的新列。
您需要按照上述其他人的建议对您的设计表面进行更改;但是,您需要执行一些额外的步骤。以下是完整的步骤:
将更新后的表格从服务器资源管理器拖到设计图面上
将此“新”表中的新列复制到“旧”表中(有关此步骤的详细信息,请参阅 M463 答案)
删除刚刚拖过的“新”表
单击并突出显示存储过程,然后将其删除
将新的存储过程拖放到位。
删除 .dbml 代码隐藏中的 .designer.vb 文件 (如果你不删除它,你的包含模式的代码隐藏将 即使重建也不会更新,并且不会包含新的表字段)
清理并重建解决方案(这将重建 .designer.vb 文件以包含所有新更改!)。
【讨论】: