ここでは、EntityFramework CodeFirstマイグレーションを使用します。 EntityFramework CodeFirst Migrationを使用する前に、私たちのデータベーステーブルとインデックスが作成されました。 私たちのテーブルはmyTableで、列はvchMyColumnA、インデックスはColumnAです。 EntityFramework CodeFirst Migrationを使用して以来、私たちはEntityFramework CodeFirst Migrationを使用してmyTableに新しい列を追加しました。EntityFrameworkからインデックスを削除するCodeFirstマイグレーション
Index ColumnAを削除する必要があります。
EntityFramework CodeFirst Migrationを実行する必要がありますか、またはインデックスを削除するスクリプトを実行するだけですか?
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はまだ存在します。
ありがとうございます。
「ColumnA」はタイプミスですか?あなたのDown()コードはそれを "vchMyColumnA"と呼んでいます。これらの問題をスクリプト化して、SQLがどのように生成されているかを確認したい。 'update-database -Script'です。 –
残念ながら、インデックスは「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