在迁移期间播种数据

启用和创建迁移后,可能需要在数据库中初始填充或迁移数据。有几种可能性,但对于简单的迁移,你可以在调用 enable-migrations 后创建的文件 Configuration 中使用方法’Seed()’。

Seed() 函数检索数据库上下文作为唯一参数,你可以在此函数中执行 EF 操作:

protected override void Seed(Model.DatabaseContext context);

你可以在 Seed() 内执行所有类型的活动。如果发生任何故障,则会回滚完整的事务(甚至应用的修补程序)。

仅当表为空时才创建数据的示例函数可能如下所示:

protected override void Seed(Model.DatabaseContext context)
{
    if (!context.Customers.Any()) {
        Customer c = new Customer{ Id = 1, Name = "Demo" };
        context.Customers.Add(c);
        context.SaveData();
    }
}

EF 开发人员提供的一个很好的功能是扩展方法 AddOrUpdate()。此方法允许基于主键更新数据或插入数据(如果它尚不存在)(该示例来自 Configuration.cs 的生成源代码):

protected override void Seed(Model.DatabaseContext context)
{
    context.People.AddOrUpdate(
      p => p.FullName,
      new Person { FullName = "Andrew Peters" },
      new Person { FullName = "Brice Lambson" },
      new Person { FullName = "Rowan Miller" }
    );
}

请注意,在应用最后一个补丁后调用 Seed() 。如果需要在修补程序期间迁移或播种数据,则需要使用其他方法。