将.NET Core与EF结合使用时,用样本数据为大系统数据库播种的正确方法是什么?

时间:2019-01-05 21:39:38

标签: c# sql-server asp.net-core entity-framework-core

系统是在带有实体框架和SQL Server的.NET Core中创建的。目前它很大,并且还在增长。在连续交付管道中,有许多环境,例如

test1 -> test2 -> test3 -> test4 -> preprod -> prod

每个环境可以具有不同的配置,例如它可以托管在Azure,本地或外部私有云中。

需要为每个环境的示例数据播种数据库,但是每个环境经常需要具有不同的数据集。

我可以看到两种方法:

  1. 编写SQL脚本。

    优点是可以从SSMS或其他控制台窗口非常轻松地运行SQL脚本。我看到的缺点是,在系统增长时进行维护很可怕。

    我正在考虑寻找Ids的关系和管理。

  2. 在C#中创建可以通过EF Core运行的种子类。

    此解决方案使我可以创建可以轻松维护的类,并且从理论上讲,我可以创建一些功能切换,该功能可以告诉应该在给定环境中运行哪个种子类。

    如果数据库模式经常更改,则将需要更新所有SQL种子脚本。该脚本可能变得无效,无法像使用EF核心种子机制那样自动检测。

    我曾与一位开发人员交谈过,他告诉我,每次我在CD管道中发布版本时,自动运行此类播种器类都会有些令人恐惧,并且不应将用于测试环境的Seeder类添加到代码存储库中

问题是什么是正确的方法,我可以使用实体框架解决所描述的问题吗?干杯

1 个答案:

答案 0 :(得分:0)

这完全取决于您的要求和db的大小。在我以前的项目中,我们创建了SQL脚本,但可能不适合连续更改dB。您还可以使用数据生成器,例如:

https://www.apexsql.com/sql-tools-generate.aspx

https://www.red-gate.com/products/sql-development/sql-data-generator/