实体框架迁移 - 未迁移列

时间:2014-06-23 18:33:17

标签: c# entity-framework ef-migrations

我在我的实体中添加了一个新属性并运行该命令以生成新的迁移,但生成的迁移不包含任何内容。看起来EF没有检测到列添加。为了在迁移中添加列,我还需要做些什么吗?这是我的班级:

 public class Group
{
    public int Id { get; set; }
    public int OrganizerId { get; set; }
    public string Name { get; set; }
    public string ImageUrl { get; set; }

    public bool IsOnline { get; set; }

    public virtual User Organizer { get; set; }
    public virtual ICollection<GroupParticipation> GroupParticipations { get; set; }
    public virtual ICollection<Question> Questions { get; set; }
    public virtual ICollection<Subject>  Subjects{ get; set; }
}

我已经隔离了我想要添加的属性,即“IsOnline”。将它添加到类并编译项目后,我运行以下命令:

Add-Migration AddGroupIsOnline

它正确地生成了一个新的迁移,但这里是迁移的样子:

public partial class AddGroupIsOnline : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

Up和Down什么都不做。应该添加我的属性,我的假设是正确的吗?

对可能发生的事情有任何想法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

好的,所以我发现了&#34;问题&#34;。基本上,在我的Group类中添加IsOnline属性后的某个时刻发生了自动迁移。因此,当我运行Add-Migration AddGroupIsOnline时,未检测到任何更改(因为它已被自动迁移更改)。

我最终通过查看我的数据库表找到了答案,列已经存在。然后我查看了迁移表,一旦激活了DB迁移就会创建,我找到了以下行:

Migration record

然后我删除了IsOnline列,从数据库中删除了自动迁移记录,然后重新运行:

Add-Migration AddGroupIsOnline

结果如下:

public partial class AddGroupIsOnline : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Groups", "IsOnline", c => c.Boolean(nullable: false));
    }

    public override void Down()
    {
        DropColumn("dbo.Groups", "IsOnline");
    }
}

所以我的自我提示是:如果迁移中没有显示任何内容,则无需迁移任何内容。验证数据库和[__MigrationHistory]表中的自动迁移。