繁体   English   中英

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

[英]What is the proper way to seed the big system's database with sample data when using .NET Core with EF?

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

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

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

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

我可以看到两种方法:

  1. 编写SQL脚本。

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

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

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

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

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

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

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

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

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

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

暂无
暂无

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

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