EF 迁移 - 在迁移期间使用 C# 业务逻辑修改现有数据

EF Migration - Modify Existing Data during Migration w/ C# business logic

作为迁移的一部分,我需要修改列中的一些现有数据,但此更新必须使用 C# 代码进行转换:数据必须读入 C#、修改,然后推回数据库。

这些更改只能在此次迁移期间发生一次。 (因此,在 Seed 方法中有条件地应用此数据更新将不起作用,即使我检查了 MigrationHistory table,因为一次可以应用多个迁移,并且此更新不会在稍后发生迁移。)

我无法在迁移过程中使用纯 ADO.NET,因为 Up() 方法仅构建框架稍后将执行的操作,而此修改依赖于架构更改在迁移本身。 (即:普通 ADO.NET 调用会过早发生。)

我觉得实现此目的的最理想方法是在框架的实际脚本执行期间有条件地注入我们的 BL,但据我所知,此扩展点并未提供。

I'm unable to using plain ADO.NET during the migration because the Up() method merely builds up the operations that the framework will execute at a later time, and this modification relies on schema changes in the migration itself. (ie: the vanilla ADO.NET calls would happen prematurely.)

创建两个迁移。

第一个执行架构更改。

第二个以空迁移开始。您编辑 Up() 方法以执行修改数据所需的所有 C# 代码。如果适用,请提供匹配的 Down() 方法。

请注意,您 可以 通过编辑第一个迁移并将数据转换代码放在 Up() 方法的末尾,在一次迁移中完成所有这些操作,以及 Down() 方法开始时的反转(如果适用)。我发现单独的迁移更干净。

These changes must only happen once and only during this migration

这是由迁移机制保证的。迁移是按顺序应用的,只有没有应用到目标数据库的迁移才会运行.