sql - 如何自动将实体模型更改部署到数据库?

标签 sql visual-studio entity-framework deployment continuous-integration

目前我使用 Visual Studio 数据库项目,因此我可以一键将更改部署到数据库并将数据保留在数据库中。

现在我希望能够在 Entity Framework 中创建模型并一键部署。

所以我得到了从 Entity Framework 创建数据库的sql脚本。我可以运行此脚本来创建数据库,但我想将数据保留在数据库中。

有什么办法可以做到这一点吗?有什么工具可以做到这一点吗?我应该用 T4 自己生成它吗?

我使用 CI,所以我需要能够经常部署。我想要类似于 Visual Studio 数据库项目部署的东西,但使用 Entity Framework 生成的数据库。

最佳答案

Liquibase是一个数据库变更管理工具。它是用 Java 实现的,但可以使用命令行版本来控制数据库升级(.NET 版本正在开发中)。

如果您需要一些建模工具支持,那么 Power architect可与 liquibase 一起使用.

与管理数据库模式升级相关的问题很微妙。对于一些背景阅读,我建议:

更新

创建一个名为liquibase.properties的文件来保存数据库详细信息:

url=jdbc:sqlserver://localhost:1433;databaseName=test
username=myuser
password=mypass
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
classpath=C:\\Program Files\\Microsoft SQL Server 2005 JDBC Driver\\sqljdbc_1.2\\enu\\sqljdbc.jar
changeLogFile=database-changelog.xml

当对现有数据库使用 liquibase 时,您可以运行以下命令:

liquibase generateChangeLog
liquibase changelogSync

第一个命令将创建一个名为 database-changelog.xml 的 XML 文件,其中包含提取的数据模型。
第二个命令是可选的,但如果您想将新更改应用于当前数据库,则很有用。它将提取的变更集标记为已在数据库中执行。

现在您已经有了一个起点,您可以继续将新的变更集添加到 database-changelog.xml 文件中。要应用这些新更改,只需运行以下命令:

liquibase update

这与您用于全新数据库的命令相同。在更新操作期间,liquibase 会将 XML 文件中的变更集与已应用于目标数据库的变更集进行比较。

对于更高级的用例,我建议阅读 liquibase 文档,以下答案也可能有所帮助:

关于sql - 如何自动将实体模型更改部署到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12746908/

相关文章:

c# - 在Visual Studio中制作Entity Framework 6模型关闭向导并断开MYSQL连接数据库

.net - 从组织上讲,在使用 Entity Framework Code First 时,我应该将常见查询放在哪里?

entity-framework - .NET 4.0 上的 Entity Framework 5 - DatabaseGeneratedOption.Identity 未定义

c# - 如何在插入前更新 LINQ 类

sql - 在sql递归WITH语句CTE中连接字符串

mysql - 如何为此 SQL 查询创建索引? (MySQL)

c# - .NET 框架升级指南

php - 在行之间插入值

visual-studio - 仅在没有管理员权限的情况下,Windows 7 64 位下的 CMake 编译器标识未知

c++ - Visual Studio 生成的静态库最大文件大小或其他限制?