Pea*_*nut 15 c# entity-framework ef-migrations
我有一些问题种子数据,我能够用一个非常小的应用程序重现问题.
鉴于你有这种种子方法:
protected override void Seed(JunkContext context)
{
context.Junks.AddOrUpdate(x => x.Name,
new Junk()
{
Name = "BANANAS!!",
Item = new JunkItem()
{
Name = "APPLES!!!"
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
当您在PMC中运行update-database时,所有实体都会成功创建.好.
但是当你想要更新数据库时,请说你的种子方法现在是这样的:
protected override void Seed(JunkContext context)
{
context.Junks.AddOrUpdate(x => x.Name,
new Junk()
{
Name = "BANANAS!!",
Item = new JunkItem()
{
Name = "ORANGES!!!"
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
子实体未更新.似乎我们可以重新播种的唯一方法是擦除数据库并重新设置所有内容.我想我理解为什么这不能按我期望的方式工作,但也许有人可以指出我正确的方向来相应地更新这种种子方法.我知道我可以写出context.JunkItems.(...)但似乎它会击败'AddOrUpdate'的整个目的.
我想我必须为每个子实体定义'keys'.示例:'Junk'获取x => x.Name但'JunkItem'当前必须'更新密钥'集.我假设这是问题所在,但我该如何处理呢?
Lad*_*nka 16
EF中没有命令自动更新子项 - AddOrUpdate
没有区别,它在内部检查顶级实体的存在(Junk
在您的情况下),如果它不存在则插入或更新它.在这种情况下插入子项是一个副作用,因为在AddOrUpdate
内部调用Add
它时会添加整个对象树.AddOrUpdate
确实没有人们想象的那么神奇,但即使有这么少的魔法,它也只能用于迁移种子,因为它是非常昂贵的操作(每个实体的额外往返数据库和大量的反射).
必须始终单独更新子项 - 可能需要您自己单独查询数据库才能找到正确的子项和常见的EF更新.
归档时间: |
|
查看次数: |
6476 次 |
最近记录: |