c#代码首先使用存储过程版本控制进行数据库迁移

时间:2017-03-13 23:05:35

标签: c# entity-framework

我们的项目使用EF代码第一种方法,它有很多存储过程。

目前我们生成像这样的DbMigration代码

var scripts = StoredProcedureMigrationHelper.GetSqlBatchFromEmbeddedResource("myStoredProc.sql");
        foreach (var script in scripts)
        {
            Sql(script);
        }

这个问题是,每当我更新存储过程时,我都要创建新的sql文件,其名称约定为" myStroedProc_versionX"。哪个有效但失去了版本控制权益,例如显示版本之间的差异。

首先在代码中使用版本控制来更新存储过程是否有方法/不同方法?

2 个答案:

答案 0 :(得分:2)

更强大,更灵活的方法可能是首先使用EF数据库,并使用Sql Server数据工具(SSDT)建模数据库。通过在解决方案中创建数据库项目,您可以构建一个dacpac并将其应用于SQL Server实例,以将模式更新为所需的状态。

答案 1 :(得分:2)

免责声明:我是Redgate Software的产品经理,ReadyRoll的制造商

如果您拥有ReadyRoll Core版本附带的Visual Studio 2017 Enterprise,则可以切换到使用基于SQL的迁移进行数据库部署。这将允许您在架构更改的同时包含存储过程的部署,同时仍允许您使用EF CodeFirst进行建模。

您可以在ReadyRoll文档中阅读有关此方法的更多信息: https://documentation.red-gate.com/display/RR1/Tutorial%3A+Entity+Framework+CodeFirst+migrations

请注意,本文使用ReadyRoll的可编程对象功能,该功能仅包含在ReadyRoll的Pro版本中。作为替代方案,您可以将存储过程编写为部署后脚本(尽管这会导致脚本在每次部署时运行,而不是仅在每次更改时运行)。