c# - 数据库部署策略 (SQL Server)

标签 c# asp.net sql-server-2005 svn visual-studio-2005

我正在寻找一种方法来进行日常部署并使数据库脚本与版本保持一致。

目前,我们有一种相当不错的方式来部署我们的源代码,我们有单元代码覆盖率、持续集成和回滚程序。

问题在于使数据库脚本与版本保持一致。每个人似乎都在测试数据库上试用脚本,然后在实时运行它们,当 ORM 映射更新(即更改生效)时,它会选择新列。

第一个问题是没有任何脚本必须写在任何地方,通常每个人都“尝试”将它们放入 Subversion 文件夹中,但一些比较懒惰的人只是在现场运行脚本,大多数时候没有人知道谁对数据库做了什么。

第二个问题是我们有 4 个测试数据库,它们总是不正常,真正将它们排成一行的唯一方法是从实时数据库进行恢复。

我坚信这样的过程需要简单、直接且易于使用,才能帮助开发人员,而不是阻碍他们。

我正在寻找的是使开发人员能够轻松地记录他们的数据库脚本以便它们可以作为发布过程的一部分运行的技术/想法。 开发人员希望遵循的流程

任何故事、用例甚至链接都会有所帮助。

最佳答案

对于这个问题,我选择使用迁移工具:Migratordotnet .

通过迁移(在任何工具中),您有一个简单的类用于执行更改和撤消它们。这是一个例子:

[Migration(62)]
public class _62_add_date_created_column : Migration
{
    public void Up()
    {
       //add it nullable
       Database.AddColumn("Customers", new Column("DateCreated", DateTime) );

       //seed it with data
       Database.Execute("update Customers set DateCreated = getdate()");

       //add not-null constraint
       Database.AddNotNullConstraint("Customers", "DateCreated");
    }

    public void Down()
    {
       Database.RemoveColumn("Customers", "DateCreated");
    }
}

此示例展示了如何处理易变更新,例如将新的非空列添加到具有现有数据的表中。这可以很容易地实现自动化,并且您可以轻松地在版本之间切换。

这对我们的构建来说是一个非常有值(value)的补充,并且极大地简化了流程。

我在这里发布了 .NET 中各种迁移框架的比较:http://benscheirman.com/2008/06/net-database-migration-tool-roundup

关于c# - 数据库部署策略 (SQL Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/504909/

相关文章:

javascript - Bootstrap 模式弹出窗口在 aspx 中无法正常工作

asp.net - VB.NET中YouTube DirectUpload的BackgroundWorker?

sql - 将表中所有字段的更改记录到另一个表中 (SQL Server 2005)

sql - 数据库查询说明

sql - 在事先不知道模式的情况下解析 XML 的更好方法

c# - Roslyn:如果尚未从类继承,如何将泛型类添加到继承的基列表?

c# - System.Random 会始终为跨平台的给定种子生成可预测的数字吗?

c# - 托管库和非托管库有什么区别?

c# - 正则表达式可以从字符串中提取多个数字吗?

c# - ASP.NET MVC 3 - 在 Post Redirect Get 工作流中检测当前页面是否被重定向到