我在播种数据时遇到了一些问题,我能够用一个非常小的应用程序重现该问题。
鉴于您有此种子方法:
protected override void Seed(JunkContext context)
{
context.Junks.AddOrUpdate(x => x.Name,
new Junk()
{
Name = "BANANAS!!",
Item = new JunkItem()
{
Name = "APPLES!!!"
}
}
);
}
当您在 PMC 中运行 update-database 时,所有实体都会成功创建。好的。
但是当你想去更新数据库时,说你的种子方法现在是这样的:
protected override void Seed(JunkContext context)
{
context.Junks.AddOrUpdate(x => x.Name,
new Junk()
{
Name = "BANANAS!!",
Item = new JunkItem()
{
Name = "ORANGES!!!"
}
}
);
}
子实体未更新。似乎我们可以重新播种的唯一方法是擦除数据库并重新播种所有内容。我想我明白为什么这不能像我期望的那样工作,但也许有人可以指出我正确的方向来相应地更新这个种子方法。我知道我可以写出 context.JunkItems。(...) 但这似乎会超出“AddOrUpdate”的全部目的。
我想我必须为每个子实体定义“键”。示例:“垃圾”获取 x => x.Name 但“垃圾项目”当前必须设置“更新密钥”。我假设这是问题所在,但我将如何处理呢?