【问题标题】:How to initialize a table column after a certain migration某个迁移后如何初始化表列
【发布时间】:2016-03-14 23:34:48
【问题描述】:

使用实体框架和 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 列和其他一些表来初始化新列(AccessLevel)

于是我写了c#代码初始化AccessLevel,放到Seed方法中。

注意

  • 我想删除 IsPublic 列,因为它不再被使用。
  • 我正在处理 4 个不同的数据库:localdb、测试服务器、暂存服务器和生产服务器。这些数据库可能处于不同的状态。因此数据和表架构可能会有所不同。

问题

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

【问题讨论】:

    标签: c# entity-framework migration database-migration entity-framework-migrations


    【解决方案1】:

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

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

    要回滚您的数据库,请在包管理器控制台窗口中,使用 Update-Database -TargetMigration [上次良好迁移的名称]。更多信息here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2023-03-14
      • 2016-02-09
      相关资源
      最近更新 更多