3

我尝试将 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 并在最后一次迁移中再次创建索引。但我相信应该存在一种简单的方法来更改该属性值。

4

1 回答 1

1

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

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

    /* Code to alter the table */

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

不要忘记把它放在Up()Down()方法中。

于 2013-08-28T13:08:55.120 回答