【问题标题】:How can I generate database tables from C# in order to version control the database?如何从 C# 生成数据库表以便对数据库进行版本控制?
【发布时间】:2010-07-15 15:45:30
【问题描述】:

目前,对数据库的更改是通过 SQL Server 管理程序进行的。如果表发生更改,则运行 sqlmetal 以重新生成 linqtosql 类并继续开发。但是,这使部署变得很痛苦,因为您必须手动更新部署数据库(以及开发周期中使用的任何其他数据库)。如果我们可以使用 C# 来生成这些更改,那就太好了,因为这将有助于消除人为错误并具有能够将数据库结构保留在 git 中的额外好处。现在,数据库的唯一表示是在生成的 linqtosql 类中。

我一直在寻找一个可以处理这类事情的好库,但主要的解决方案似乎是:保留一个 sql 生成脚本,或者将 sql 嵌入到可以运行的 C# 类中以对数据库。这两种情况似乎都不是理想的情况,因为您失去了 C# 提供的良好的强类型。似乎应该有一种方法可以使用纯 C# 来做到这一点。

我已经看到了能够使用实体框架和 linqtosql 从 POCO 生成数据库的提示,但我很难找到正在使用的具体示例。此外,我无法发现它们是否有一种优雅的(即数据保存)方式来处理初始表生成后对数据库的更改。

有没有解决这个问题的项目?

【问题讨论】:

    标签: c# .net sql-server database


    【解决方案1】:

    有几种工具可以帮助您迁移数据库的架构(和数据):RikMigrationsMigrator.NetMachine.Migrations。希望对您有所帮助。

    Wizardby 看起来也很有前途:它提供了独立于数据库的 DDL 脚本和不同版本架构之间的自动迁移。

    【讨论】:

    • 太棒了!这正是我正在寻找的类型。我找到了 Wizardby,但它看起来已经被废弃了,它仍在编写 sql 和注释 C#。前三个看起来正是我要找的。非常感谢!
    • 请注意RikMigrations link 已更改。
    【解决方案2】:

    VS2010 可以通过数据库项目对您的数据库模式进行版本控制。还有其他用于数据库开发的工具提供版本控制,您需要搜索以找到它们并比较价格。

    【讨论】:

    • +1,如果您完全使用 MS 堆栈,那么数据库项目确实是这种情况下的标准操作程序。它不会出现在 C# 中,但它是一个简洁的概念,用于将数据库作为 VS 项目进行管理,可以进行源代码控制,并带有许多您期望从 Visual Studio 获得的修饰 - 大量选项,更改能力不同构建配置的设置,直接从 VS 自动部署,在目标数据库上生成差异部署脚本的能力等。
    【解决方案3】:

    我更喜欢使用 sql 脚本进行版本控制。运行良好,免费,支持更新,易于版本化,适用于传统的源代码控制方法。

    首先,

    1. 创建您的数据库
    2. 使用数据库发布向导将数据库发布为 .sql 脚本
    3. 向脚本添加版本号
    4. 添加到您的解决方案中
    5. 检查源代码管理。

    随着更新,

    1. 将先前架构的脚本更新为 .sql 文件
    2. 将版本号添加到从先前版本递增的脚本中
    3. 添加到您的解决方案中
    4. 检查源代码管理。

    【讨论】:

      【解决方案4】:

      听起来您需要像 Migrator.NET 这样的工具来管理您的数据库迁移。我们将它与我们网站启动的调用一起使用,以根据任何特定版本的需要迁移数据库。

      我曾有过创建cleaner interface 的想法,并希望有朝一日能够实施它,但其他优先事项已将其推迟。现在我们在迁移中使用原始 sql 字符串,因为没有 sybase 驱动程序实现(除了我为管理版本表而编写的一个非常丑陋的 hack 之外)。

      【讨论】:

        【解决方案5】:

        Redgate 软件提供了一些可能对您真正有用的东西。它被称为SQL Packager,它做得很好。

        特点:

        • 在您的客户群中轻松推出数据库更新
        • 准确快速地编写脚本并压缩您的架构和数据
        • 将任何预先存在的 SQL 脚本打包为 .exe,或作为 C# 项目启动
        • 简化 SQL Server 2000、2005 和 2008 的部署和更新

        他们还提供SQL Source Control,这也可能有助于让事情变得轻松愉快。

        【讨论】:

        【解决方案6】:

        作为 MadBoy 的插件,SQL Packager 还可以将包作为 C# 项目启动。

        Red-Gate 的 SQL Compare 也很出色,正如 SO 上的一些横幅所示,还有新的 SQL Source Control 可用。

        然后他们有他们的SQL Comparison SDK

        【讨论】:

          【解决方案7】:

          这里的诀窍是依赖数据库作为 Linq 架构的唯一真实来源,而不是生成的类。
          我们在开发商店中广泛使用 Linq to SQL,工作方式如下:
          1. 从版本控制(基线)创建您的数据库(工作副本)。
          2. 以您喜欢的方式修改您的数据库。
          3. 从(工作)数据库生成 Linq to SQL 类。
          4. 创建补丁以将您的基准数据库更新为您的工作副本。
          5. 签入并与所有开发人员共享这些补丁。

          如需生成基线和工作副本数据库的快速简便的方法,请尝试 DBSourceTools。 http://dbsourcetools.codeplex.com

          玩得开心。

          【讨论】:

            猜你喜欢
            • 2010-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-18
            • 2011-09-25
            • 2019-08-10
            相关资源
            最近更新 更多