【发布时间】:2016-05-06 18:00:01
【问题描述】:
我需要使用迁移将代码优先实体框架属性从一个实体移动到另一个实体。这类似于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 命令?
【问题讨论】:
标签: c# entity-framework entity-framework-migrations