我需要使用迁移将代码第一个实体框架属性从一个实体移动到另一个实体。这与Move property to new Entity in Entity Framework Code First Migration类似,但有一个额外的折痕:我需要在我的应用程序中发布迁移,以便具有现有数据的客户可以自动迁移。在实体框架代码第一次迁移中删除移动的属性
在这个问题接受的答案说,打破过程分为三个迁移:
- 添加新的属性
- 从旧属性的数据移动到新的物业
- 删除旧的财产
用于在所述第二移动数据移动的代码是:
using (var context = new AppContext())
{
var events = context.Set<Event>().ToArray();
foreach (var ev in events)
{
ev.Location = new Location { City = ev.City };
}
context.SaveChanges();
}
问题是,当我删除旧属性以生成第三次迁移时,第二次迁移的代码将不再编译,因为属性ev.City
不再存在。
在第二次迁移中仍然移动数据的同时,在第三次迁移中从代码模型和数据库中删除属性的正确方法是什么?有没有办法编写第二个迁移代码来移动数据而不参考ev.City
?是否有实体框架方法可以让我检索ev.City
的值,而不需要具有该名称的属性,还是需要一直拖放到原始SQL命令?
我想你可能是对的,我不得不直接使用SQL,但它比简单的更新更复杂。第二个迁移代码也插入新的实体,所以至少需要一个INSERT ... SELECT语句。这可能比使用上下文更快,但它也更容易出错。感谢您指出Sql函数以用于迁移。 –
@StuartMalone好消息是,在原始SQL中测试非常容易。另外我相信你添加的任何东西都会被包装在一个自动交易中。 – BigJump