当列具有索引时,实体框架无法迁移MaxLength值

时间:2013-04-05 20:03:38

标签: entity-framework entity-framework-6

我尝试将MaxLength属性从100更改为50,然后我得到例外

"The index 'IX_Singers_Name' is dependent on column 'Name'.
ALTER TABLE ALTER COLUMN Name failed because one or more objects access this column."

模式是:

public class Singer : NamedEntity
{
    [MaxLength(50)] // It was 100
    public override string Name { get; set; }

}

据我所知,实体框架需要为此更改更改表,但它不能更改表,因为Name属性上存在索引。那么我如何通过实体框架迁移实现这一目标呢?

我可以删除迁移中的索引,然后在下次迁移中更改maxlength,并再次创建索引。但我相信应该存在一种改变该属性值的简单方法。

1 个答案:

答案 0 :(得分:1)

在SQL Server中,索引与表本身非常相似。因此,如果您在索引中获得了列,则需要修改该索引和表。我同意,在EF迁移被搭建以添加索引(例如,对于外键)的情况下,他们还应该注意删除和重新应用索引。但是,在这种情况下,必须手动添加索引。因此,需要在迁移中手动维护。请注意,它可以在一次迁移中完成:

public override void Up() 
{
    DropIndex("dbo.Singer", new []{"Name"});

    /* Code to alter the table */

    CreateIndex("dbo.Singer", "Name");
}

不要忘记将其放在Up()Down()方法中。