作为迁移的一部分,我需要修改列中的一些现有数据,但必须使用C#代码转换此更新:必须将数据读入C#,修改,然后将其推送回DB。
这些更改只能在此次迁移期间执行一次。 (因此,即使我检查MigrationHistory表,有条件地在Seed方法中应用此数据更新也不起作用,因为一次可以应用多个迁移,并且在以后的迁移之后不能进行此更新。)< / p>
我无法在迁移期间使用普通的ADO.NET,因为Up()
方法只是构建了框架稍后将执行的操作,而这种修改依赖于架构中的架构更改。迁移本身。 (即:香草ADO.NET调用过早发生。)
我觉得实现这一目标的最理想方式是在框架的实际脚本执行期间有条件地注入我们的BL,但是没有提供这个可扩展性点。
答案 0 :(得分:3)
我无法在迁移期间使用普通的ADO.NET,因为Up()方法仅构建框架稍后将执行的操作,并且此修改依赖于迁移本身中的模式更改。 (即:香草ADO.NET调用过早发生。)
创建两次迁移。
第一个执行架构更改。
第二个开始是空迁移。您编辑Up()
方法以执行修改数据所需的所有C#代码。如果适用,请提供匹配的Down()
方法。
请注意,可以通过编辑第一次迁移并将数据转换代码放在Up()
方法的末尾,然后撤消(如果 在一次迁移中执行所有操作适用)Down()
方法的开头。我发现单独的迁移更清洁。
这些更改只能在此次迁移过程中发生一次
这是由迁移机制保证的。迁移按顺序应用,并且只有尚未应用于目标数据库的迁移才会运行。