我需要使用迁移将代码优先 Entity Framework 属性从一个实体移动到另一个实体。这类似于 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
?是否有 Entity Framework 方法允许我在没有具有该名称的属性的情况下检索 ev.City 的值,或者我是否需要一直下降到原始 SQL 命令?
最佳答案
我不会在您的迁移中使用上下文。相反,我会在迁移中使用它:
Sql("更新 x SET foo=bar");
那么你的实体是什么样子并不重要。
关于c# - 在 Entity Framework 代码优先迁移中删除移动的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078705/