我们的项目使用EF代码第一种方法,它有很多存储过程。
目前我们生成像这样的DbMigration代码
var scripts = StoredProcedureMigrationHelper.GetSqlBatchFromEmbeddedResource("myStoredProc.sql");
foreach (var script in scripts)
{
Sql(script);
}
这个问题是,每当我更新存储过程时,我都要创建新的sql文件,其名称约定为" myStroedProc_versionX"。哪个有效但失去了版本控制权益,例如显示版本之间的差异。
首先在代码中使用版本控制来更新存储过程是否有方法/不同方法?
答案 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版本中。作为替代方案,您可以将存储过程编写为部署后脚本(尽管这会导致脚本在每次部署时运行,而不是仅在每次更改时运行)。