系统是在带有实体框架和SQL Server的.NET Core中创建的。目前它很大,并且还在增长。在连续交付管道中,有许多环境,例如
test1 -> test2 -> test3 -> test4 -> preprod -> prod
每个环境可以具有不同的配置,例如它可以托管在Azure,本地或外部私有云中。
需要为每个环境的示例数据播种数据库,但是每个环境经常需要具有不同的数据集。
我可以看到两种方法:
编写SQL脚本。
优点是可以从SSMS或其他控制台窗口非常轻松地运行SQL脚本。我看到的缺点是,在系统增长时进行维护很可怕。
我正在考虑寻找Ids的关系和管理。
在C#中创建可以通过EF Core运行的种子类。
此解决方案使我可以创建可以轻松维护的类,并且从理论上讲,我可以创建一些功能切换,该功能可以告诉应该在给定环境中运行哪个种子类。
如果数据库模式经常更改,则将需要更新所有SQL种子脚本。该脚本可能变得无效,无法像使用EF核心种子机制那样自动检测。
我曾与一位开发人员交谈过,他告诉我,每次我在CD管道中发布版本时,自动运行此类播种器类都会有些令人恐惧,并且不应将用于测试环境的Seeder类添加到代码存储库中
问题是什么是正确的方法,我可以使用实体框架解决所描述的问题吗?干杯
答案 0 :(得分:0)
这完全取决于您的要求和db的大小。在我以前的项目中,我们创建了SQL脚本,但可能不适合连续更改dB。您还可以使用数据生成器,例如:
https://www.apexsql.com/sql-tools-generate.aspx
https://www.red-gate.com/products/sql-development/sql-data-generator/