EF迁移:将索引字段更改为可空时出错

Kir*_*eed 8 ef-migrations entity-framework-5

我初始迁移中的代码如下

        CreateTable(
            "dbo.Sites",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Description = c.String(maxLength: 450)
                })
            .PrimaryKey(t => t.Id);
Run Code Online (Sandbox Code Playgroud)

为了使Description字段是唯一的,我将以下内容添加到UP方法的末尾

CreateIndex("dbo.Sites","Description",唯一:true);

后来我决定要求描述字段.

新迁移会产生以下更改

AlterColumn("dbo.Sites","Description",c => c.String(nullable:false,maxLength:450));

但是,当此更改尝试运行时,我收到错误

ALTER TABLE ALTER COLUMN描述失败,因为一个或多个对象访问此列.

我能够使用分析器隔离SQL行,如

ALTER TABLE [dbo].[Sites] ALTER COLUMN [描述] nvarchar NOT NULL

当我在Management Studio中运行它时,会出现以下错误

消息5074,级别16,状态1,行1索引'IX_Description'取决于列'描述'.消息4922,级别16,状态9,行1 ALTER TABLE ALTER COLUMN描述失败,因为一个或多个对象访问此列.

如何获取迁移代码以删除索引,然后更改更改列,然后重新构建索引?

我正在使用SQL Server 2008 R2

Mar*_*ark 10

也许这样的事情?

DropIndex("dbo.Sites", "IX_Description");
AlterColumn("dbo.Sites", "Description", c => c.String(nullable: false, maxLength: 450));
CreateIndex("dbo.Sites", "Description", unique: true);
Run Code Online (Sandbox Code Playgroud)

我认为您也可以执行SQL direct,如下所示.

Sql("DROP INDEX [IX_Description] ON [dbo].[Sites] WITH ( ONLINE = OFF )");
Run Code Online (Sandbox Code Playgroud)

如果要添加检查索引存在或其他内容,这可能很有用.