c# - Entity Framework 5 迁移与数据迁移

标签 c# entity-framework entity-framework-migrations

我有一个具有字符串属性的实体,我需要将其外部化到另一组实体:

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”实体,但它有问题,因为它检测到模型与当前模式不同步。

最佳答案

在您的项目中,转到包管理器窗口并:

  1. 启用迁移:Enable-Migrations
  2. 创建迁移:Add-Migration Initial
  3. 创建升级/降级脚本:Update-Database

在您的情况下,您要添加一个新表 (Color) 和两个新列。

你有理由,如果你启动你的网站,FavoriteColor 将被删除,包括它的数据。

您可以做什么:

当您运行 Add-Migration Initial 时,在程序包管理器控制台中将创建一个新脚本(C# 文件)。正如您在该文件中看到的,删除了 1 列,添加了 2 列,并创建了 1 个表。

确保表在列之前创建,用数据填充它,用基于旧列的现有数据创建你的 2 列,然后删除列。

另一种方法(也许更好)是在多个迁移脚本中执行此操作,您还可以使用 Seed() 方法来填充数据。

关于c# - Entity Framework 5 迁移与数据迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18671425/

相关文章:

java - 创建jni4.jar文件时显示 'javac' 无法识别为内部或外部命令、可运行程序或批处理文件

c# - 合并多个 AndroidManifest.xml 时出现问题

c# - Entity Framework 设计 - 数据的多个 "Views"

c# - 第二次迁移时 Entity Framework Core 编译器错误

c# - 识别下载的文件

c# - 有没有机会,我们可以想象在一个进程(可能是 c#)中什么都进入了堆栈,什么都进入了堆?

c# - 获取对 Entity Framework 中对象所做的所有更改

php - 调用未定义的方法 Closure::getName()

entity-framework - Azure Web 作业运行一次

entity-framework - 代码优先迁移 MissingManifestResourceException