我熟悉并一直在使用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())?
答案 0 :(得分:0)
在更改HasData()
参数后,只需添加新的迁移即可处理A类和B类的更改。
但是,将子实体从C类迁移到B类时,需要在添加迁移之后手动对其进行编辑。