我尝试将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,并再次创建索引。但我相信应该存在一种改变该属性值的简单方法。
答案 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()
方法中。