首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有数据迁移的实体框架5迁移

带有数据迁移的实体框架5迁移
EN

Stack Overflow用户
提问于 2013-09-07 08:31:30
回答 2查看 2K关注 0票数 4

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

代码语言:javascript
复制
public class MyEntity
{
    public int Id { get; set; }
    public string FavoriteColor { get; set; }
}

我想将此改为:

代码语言:javascript
复制
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; }
}

如果创建迁移,它将在db中创建新的“颜色”表,然后将新列添加到"MyEntity“中。如何确保不松散"MyEntity”上以字符串形式存在的所有数据?我试图在迁移中加载DbContext,以便根据"MyEntity“中的字符串数据创建新的”颜色“实体,但由于它检测到模型与当前模式不同步,因此存在问题。

EN

回答 2

Stack Overflow用户

发布于 2013-09-07 10:43:45

在您的项目中,转到窗口,并:

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

在这种情况下,您将添加一个新表(Color)和两个新列。

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

你能做什么:

运行Add-Migration Initial时,在包管理器控制台中创建一个新脚本(C#文件)。正如您在这个文件中所看到的,有一个列被删除,两个被添加,一个表被创建。

确保在列之前创建表,用数据填充表,根据旧列使用现有数据创建2列,然后删除该列。

另一种方法(也许更好)是在几个迁移脚本中这样做,您也可以使用Seed()方法来填充数据。

票数 2
EN

Stack Overflow用户

发布于 2015-11-04 10:37:25

如果使用Add-Migration创建迁移,则迁移文件将是脚手架,如下所示:

代码语言:javascript
复制
Up()
{
    CreateTable("dbo.Color"...);
    DropColumn("FavoriteColor");
    AddColumn("FavoriteColor", c=>Int(nullable: false));

// Some other code
}

您也可以修改此文件以实现数据迁移

代码语言:javascript
复制
Up()
{
    CreateTable("dbo.Color"...);
    AddColumn("FavoriteColor", c=>Int(nullable: false));

    Sql("INSERT INTO dbo.Color (Id, Name) SELECT DISTINCT FavoriteColor FROM dbo.MyEntity");

    // And the other data corrections here using Sql() method.

    DropColumn("FavoriteColor");

// Some other code
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18671425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档