2017-05-15 1 views
1

ここでは、EntityFramework CodeFirstマイグレーションを使用します。 EntityFramework CodeFirst Migrationを使用する前に、私たちのデータベーステーブルとインデックスが作成されました。 私たちのテーブルはmyTableで、列はvchMyColumnA、インデックスはColumnAです。 EntityFramework CodeFirst Migrationを使用して以来、私たちはEntityFramework CodeFirst Migrationを使用してmyTableに新しい列を追加しました。EntityFrameworkからインデックスを削除するCodeFirstマイグレーション

Index ColumnAを削除する必要があります。

  1. EntityFramework CodeFirst Migrationを実行する必要がありますか、またはインデックスを削除するスクリプトを実行するだけですか?

  2. EntityFramework CodeFirst Migrationでインデックスを削除する必要がある場合は、どうすればよいですか?パッケージマネージャコンソールで、私はアドオンの移行DropColumnAIndexを入力し、移行コードDropColumnAIndexを開き、次のコードを追加:

    public partial class DropColumnAIndex : DbMigration 
    { 
    
        public override void Up() 
        { 
         DropIndex("dbo.myTable", new[] { "ColumnA" }); 
        } 
    
        public override void Down() 
        { 
         CreateIndex("dbo.myTable", "vchMyColumnA"); 
        } 
    } 
    

それから私は、更新のデータベースを入力しました。 エラーはなく、データベース内の移行(select * from __MigrationHistor)を見ることができますが、インデックスColumnAはまだ存在します。

ありがとうございます。

+0

「ColumnA」はタイプミスですか?あなたのDown()コードはそれを "vchMyColumnA"と呼んでいます。これらの問題をスクリプト化して、SQLがどのように生成されているかを確認したい。 'update-database -Script'です。 –

+0

残念ながら、インデックスは「ColumnA」と呼ばれ、列自体は「vchMyColumnA」と呼ばれます。 IF EXISTS(SELECT name FROM sys.indexes WHERE name = N'IX_ColumnA 'AND object_id = object_id(N' [dbo]。[myTable] '、N'U')は、データベースを更新するときにこのスクリプトを返します。 )) DROP INDEX [IX_COLUMNA] ON [dbo]。[myTable]。 EF CodeFirstマイグレーションによって列 "vchMyColumnA"に "ColumnA"というインデックスをドロップするにはどうすればよいですか?それを行うためのスクリプトを実行できますか?ありがとうございます – faujong

答えて

1

申し訳ありませんが、これをコメントに書いてください。

public override void Up() 
{ 
    Sql("DROP INDEX ColumnA ON [dbo].[myTable];"); 
} 
+0

それは動作します!ありがとうございました ! Down()コードには何を挿入しますか?このコードはまだOKですか? CreateIndex( "dbo.myTable"、 "vchMyColumnA"); – faujong

+1

はい、インデックスが再追加されます。 –

+0

ありがとう – faujong

関連する問題