如何在迁移过程中使用函数

本文关键字:函数 过程中 迁移 | 更新日期: 2023-09-27 18:27:16

我正在尝试迁移此模型:

public partial class Project
{
    public virtual int Id { get; set; }
}

该型号:

public partial class Project
{
    public virtual int Id { get; set; }
    public virtual string CryptoId { get; set; }
}

运行Add-Migration后,我得到的是:

public override void Up()
{
    AddColumn("dbo.projects", "cryptoId", c => c.String());
}

我扩展到:

public override void Up()
{
    AddColumn("dbo.projects", "cryptoId", c => c.String());
    // Populate cryptoId
    using (var db = new DbContext())
    {
        foreach (Project p in db.Projects)
        {
            Sql(string.Format
            (
                "UPDATE [dbo].[projects] SET [cryptoId] = '{0}' WHERE [id] = {1}",
                new CryptoId(p.Id), p.Id
            ));
        }
    }
}

然而,这不起作用。当我运行Update-Database时,我得到以下错误消息:

自创建数据库以来,支持"DbContext"上下文的模型已更改。

错误的发生显然是因为我试图用最新的上下文访问过时的数据库,但我需要知道Project.Id才能填充我的Project.CryptoId

我该怎么做?

如何在迁移过程中使用函数

您总是可以将其作为两个独立的迁移来完成——一个用于处理模式,另一个(模式现在与您的代码匹配)用于处理数据的更改。。。