如何在某个迁移后初始化 table 列

How to initialize a table column after a certain migration

使用 Entity Framework 和 ASP.Net,我的实体模型之一是:

public class Records {

    public bool IsPublic {get; set;}
    // Some other properties
}

我已将模型更改为:

public class Records {

    [obsolete]
    public bool IsPublic {get; set;}

    public RecordAccess AccessLevel {get; set;}
}

在哪里

public enum RecordAccess {Public, Private, Group };

迁移后,我需要根据 IsPublic 列和其他一些 tables.[=21] 初始化新列 (AccessLevel) =]

所以我写了c#代码来初始化AccessLevel并把它放在Seed方法中。

备注

  • 我想删除 IsPublic 列,因为它不再被使用。
  • 我正在处理 4 个不同的数据库:localdb、测试服务器、登台服务器和生产服务器。这些数据库可能不处于相同状态。所以数据和 table 模式可能不同。

问题

  • Seed 方法是放置初始化的正确位置吗? (如果我从 Record class 中删除 IsPublic 代码将不会被编译)
  • 如何将迁移和数据回滚到之前的状态?

我会使用 Sql("[INSERT SQL HERE]") 方法在迁移本身中编写初始化。这是假设这是一次移动。

如果你把它放在 Seed 方法中,代码将 运行 每次数据库更新新的迁移,这意味着你可能最终会编写代码来检查它是否已经已经完成并忽略它,使其一次性使用,这基本上使它成为一个迁移。

要回滚数据库,请在程序包管理器控制台 window 中使用 Update-Database -TargetMigration [上次成功迁移的名称]。更多信息 here.