通过EF迁移更新数据

时间:2018-12-18 10:30:47

标签: entity-framework-6

我要更新在表中创建的新列,如下所示:

public partial class PortDealerTokens : DbMigration
{
    public override void Up()
    {
        IEnumerable<DealerAdapter> dealers;

        using (var context = new TestDriveContext())
        {
            dealers = context.Dealers.ToList();

        }

        foreach (var dealer in dealers)
        {
            using (var newContext = new TestDriveContext())
            {
                dealer.Token = < MyFunction >;

                newContext.SaveChanges();
            }
        }
    }

    public override void Down()
    {
    }
}

此代码不起作用,因为当我调用Update-Database时,出现错误,提示无法在对象'dbo .__ MigrationHistory'中插入重复键。重复的键值为(201812180729383_PortDealerTokens。

如何解决此问题?有更好的策略吗?

1 个答案:

答案 0 :(得分:0)

您可以使用override seed method进行操作 或通过迁移类中的Sql方法

public partial class PortDealerTokens : DbMigration
{
    public override void Up()
    {
        //Sql script to populate your data   
        Sql("");
    }

    public override void Down()
    {
    }
}  

更新

但是,当您运行update-database命令时,无论是否进行了新迁移,种子方法都会运行 enter image description here 在这张图片中

1-add-migration'迁移名称'-添加新的空迁移

2-更新数据库-应用此迁移,然后运行“种子”方法

3-updata数据库-没有待处理的显式迁移,然后运行“种子”方法。