Entity Framework 数据迁移

Entity Framework Data Migration

我们更改了应用程序中的一些逻辑,现在我们在迁移中添加了一些字段,但现有条目也应该获得一些值。因此我们需要加载条目,计算一些值并需要将这个值添加到新字段中。那么如何访问Sql-Method请求的数据呢? AddColumn-Method 的 defaultValue-Flag 将不起作用,因为每个条目的计算值都不同。

这里有一些工作流程:

protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AddColumn<uint>(
            name: "Field",
            table: "Table",
            type: "INTEGER",
            nullable: false,
            defaultValue: 0u);


        var builder = migrationBuilder.Sql("SELECT * FROM Table");

        var data = builder.AccessData; // here I´m unsure how to access the data

        data.Field = Calculator(data);

        migrationBuilder.UpdateData(data); // this one is also not cleare
    }

A MigrationBuilder 是一种以流畅、C# 友好的方式表达将在迁移过程中执行的 SQL 代码的方法。即使您编写的代码和迁移工具生成的“中间文件”看起来像 C#,最终迁移也变得纯粹 SQL,既不知道也无法与您的应用程序通信。

因此,如果您需要处理现有数据,您的所有逻辑都必须发生 DB-side,并且必须表示为对 MigrationBuilder 的操作。当然,在迁移的 UpDown 方法中,您可以利用 C# 的所有功能来构建要提供给 migrationBuilder.Sql(...) 的原始 SQL 语句。此外,考虑到整个迁移是在事务中执行的,并且“易失性”存储过程可能对提取复杂的迁移逻辑很有用。