我有一个具有字符串属性的实体,我需要将其外部化到另一组实体:
public class MyEntity
{
public int Id { get; set; }
public string FavoriteColor { get; set; }
}
我想将其更改为:
public class MyEntity
{
public int Id { get; set; }
public Color FavoriteColor { get; set; }
public int FavoriteColorId { get; set; }
}
public class Color
{
public int Id { get; set; }
public string Name { get; set; }
}
如果我创建一个迁移,它会在数据库中创建新的“Color”表,然后将新列添加到“MyEntity。我如何确保我不会丢失以字符串形式存在的所有数据” MyEntity”?我尝试在迁移中加载 DbContext,以根据“MyEntity”中的字符串数据创建新的“Color”实体,但它有问题,因为它检测到模型与当前模式不同步。
最佳答案
在您的项目中,转到包管理器窗口并:
- 启用迁移:
Enable-Migrations
- 创建迁移:
Add-Migration Initial
- 创建升级/降级脚本:
Update-Database
在您的情况下,您要添加一个新表 (Color
) 和两个新列。
你有理由,如果你启动你的网站,FavoriteColor
将被删除,包括它的数据。
您可以做什么:
当您运行 Add-Migration Initial
时,在程序包管理器控制台中将创建一个新脚本(C# 文件)。正如您在该文件中看到的,删除了 1 列,添加了 2 列,并创建了 1 个表。
确保表在列之前创建,用数据填充它,用基于旧列的现有数据创建你的 2 列,然后删除列。
另一种方法(也许更好)是在多个迁移脚本中执行此操作,您还可以使用 Seed()
方法来填充数据。
关于c# - Entity Framework 5 迁移与数据迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18671425/