EF核心种子迁移:重新播种

时间:2018-09-03 06:23:18

标签: c# sqlite entity-framework-core

我熟悉并一直在使用EF Core 2.1迁移和播种。但是,我不清楚如何将种子迁移到新的(更改的)版本。

因此在该应用程序的版本1中,我拥有:

update(req, res, next) {
  let data = req.body;
  let id = req.params.id;
  if(id) {
    this.lib.db.model('Issues')
      .findOne({_id: id})
      .exec((err, updateIssue) => {
        if(err) return next(this.RESTError('InternalServerError', err));
        updateIssue = Object.assign(updateIssue, data);
        updateIssue.save((err, issue) => {
          if(err) return next(this.RESTError('InternalServerError', err));
          this.writeHAL(res, issue);
        });
      });
  }
  else if(data) {
    let newIssue = this.lib.db.model('Issues')(data);
    console.log(newIssue);
    newIssue.save((err, issue) => {
      if(err) return next(this.RESTError('InternalServerError', err));
      this.writeHAL(res, issue);
    });
  } else {
    next(this.RESTError('InvalidArgumentError', 'No data received'));
  }
}

用户一直在这些类别下添加项目,即

modelBuilder.Entity<Category>().HasData(
  new Category[]
  {
    new Category() { Id = 1, Name = "Category A" },
    new Category() { Id = 2, Name = "Category B" },
    new Category() { Id = 3, Name = "Category C" }
  });

仅供参考:Xamarin Forms-因此数据库是每个用户设备上的Sqlite数据库。

现在我要发布版本2,并且类别已经更改,但是我不想丢失任何现有的用户数据。

类别种子数据现在看起来像:

public class Category {
    public List<UserItem> Items {get; set;}
}

类别A保持不变,类别B有了新名称,并且类别C已被删除,类别C现在必须位于类别B下。

如何在EF Core迁移中实现这一点,以将现有UserItems数据保留在新类别下(请注意,由于每个用户都有自己的数据库,所以我只能使用EF运行时上下文进行迁移。Migrate())?

1 个答案:

答案 0 :(得分:0)

在更改HasData()参数后,只需添加新的迁移即可处理A类和B类的更改。

但是,将子实体从C类迁移到B类时,需要在添加迁移之后手动对其进行编辑。