繁体   English   中英

c# code first 使用存储过程版本控制进行数据库迁移

[英]c# code first DB migration with stored proc versioning control

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

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

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

问题在于,每次更新存储过程时,我都必须创建新的 sql 文件,其名称约定如“myStroedProc_versionX”。 哪个有效但失去了版本控制优势,例如显示版本之间的差异。

有没有一种方法/不同的方法可以首先在代码中使用版本控制更新存储过程?

一种更强大、更灵活的方法可能是首先使用 EF 数据库,然后使用 Sql Server Data Tools (SSDT) 对数据库进行建模。 通过在您的解决方案中创建数据库项目,您可以构建一个 dacpac 并将其应用于 SQL Server 实例,以将您的架构更新到所需的状态。

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

如果您有 Visual Studio 2017 Enterprise(随 ReadyRoll Core 版本一起提供),您可以切换到使用基于 SQL 的迁移来进行数据库部署。 这将允许您将存储过程的部署与架构更改一起包括在内,同时仍然允许您使用 EF CodeFirst 进行建模。

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

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

不幸的是,EF 没有为此提供本机解决方案,但我找到了一个解决方案,并在这篇文章中进行了解释: https ://softcadbury.github.io/dotnet/entity-framework/2022/05/10/versionize- 存储过程与实体框架.html

这个想法是在您的解决方案中使用 SQL 存储过程的 SQL 代码(也适用于 SQL 视图或 SQL 函数),并使用一些 C# 扩展,您可以在 EF 迁移中管理它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM