与SQL Server数据库同步LINQ到SQL DBML架构

问题描述:

创建SQL Server 2008数据库后,我在Visual Studio中创建了一个Linq-to-SQL架构。接下来,在.dbml可视化编辑器(在Visual Studio 2010中)中,我添加了PK-to-FK和PK-to-PK关联到模式。与SQL Server数据库同步LINQ到SQL DBML架构

我如何将我在Visual Studio中创建的关联复制到数据库?换句话说,我如何与数据库同步

Linq-to-SQL是一个伟大的工具,但永远不会依赖它来更新模式。始终通过升级使用DDL CREATE/ALTER/DROP语句的SQL脚本来应用架构更改,以从on-disk version to the current version更改已部署的架构。这样,您可以将所有模式更改作为源文本文件保存在版本控制下,可以从任何过去的版本升级到当前的应用程序版本,并且可以轻松地测试所有升级路径,包括使用非常大的表升级部署。

更糟糕的选择是使用SQL比较工具,它们可能会与您部署的模式不同,如vsdbcmd。这可能适用于微不足道的部署,但复制和重命名数百万条记录的表格将很快显示出其恶劣的缺点。

你绝对不能做的是依赖.dbml文件作为模式的“主”副本。这是Linq-to-SQL倡导者通常省略的一点细节,当您尝试提供应用程序的v2并意识到您没有升级工具时,通常会发现这种细节。

+0

那么我应该从这里做什么?我还没有任何记录,因为我刚开始开发这个应用程序。 – 2010-05-26 22:24:28

+0

我会告诉你我是如何做到的:我创建了一个包含脚本的SQL文本文件来部署我的应用程序的v1。该文件作为资源嵌入到我的应用程序中,当我启动时,我将运行此脚本(将其转换为一系列GO分隔的批次,然后运行每个批次)。然后,随着我的应用程序的发展,我将添加一个脚本,将数据库从v1升级到v1.2,然后为v1.3增加一个新脚本。当我发布一个新版本的应用程序时,我只需添加一个新的升级脚本。部署新应用程序时,它会检查当前模式版本并运行所有中间升级。 – 2010-05-27 05:04:47

+1

这是在http://rusanu.com/2009/05/15/version-control-and-your-database的链接中描述的。除非执行升级脚本并增加模式版本,否则我不会更改数据库模式中的任何内容。 – 2010-05-27 05:06:27