2016-11-17 5 views
0

エラーが発生しました - 名前が 'IX_address_unique'のインデックスまたは統計情報がすでに 'dbo.Addresses'テーブルに存在するため、操作が失敗しました。問題のインデックスは、私がここでは、コード最初のEFバージョン6で作成した複合インデックスは、DbContextクラスのコードです -テーブルエラーエンティティフレームワークコードの最初の移行にインデックスが既に存在しています

// create unique address composite index based on properties // address1 property modelBuilder.Entity<Address>().Property(t => t.address1) .HasMaxLength(250) .IsRequired() .HasUniqueIndexAnnotation("IX_address_unique", 0); // city property modelBuilder.Entity<Address>().Property(t => t.city) .HasMaxLength(50) .IsRequired() .HasUniqueIndexAnnotation("IX_address_unique", 1); // state property modelBuilder.Entity<Address>().Property(t => t.state) .HasMaxLength(50) .IsRequired() .HasUniqueIndexAnnotation("IX_address_unique", 2); // postal code property modelBuilder.Entity<Address>().Property(t => t.postal_code) .HasMaxLength(20) .IsRequired() .HasUniqueIndexAnnotation("IX_address_unique", 3);

コマンドの追加・マイグレーションCreateUniqueIndexAddressesTableを実行するとき、これは、次のDbMigrationを作成します。

public partial class CreateUniqueIndexAddressesTable : DbMigration 
{ 
    public override void Up() 
    { 
     AlterColumn("dbo.Addresses", "address1", c => c.String(nullable: false, maxLength: 250)); 
     AlterColumn("dbo.Addresses", "address2", c => c.String(maxLength: 250)); 
     AlterColumn("dbo.Addresses", "city", c => c.String(nullable: false, maxLength: 50)); 
     AlterColumn("dbo.Addresses", "state", c => c.String(nullable: false, maxLength: 50)); 
     AlterColumn("dbo.Addresses", "postal_code", c => c.String(nullable: false, maxLength: 20)); 
     CreateIndex("dbo.Addresses", new[] { "address1", "city", "state", "postal_code" }, unique: true, name: "IX_address_unique"); 
    } 

    public override void Down() 
    { 
     DropIndex("dbo.Addresses", "IX_address_unique"); 
     AlterColumn("dbo.Addresses", "postal_code", c => c.String()); 
     AlterColumn("dbo.Addresses", "state", c => c.String()); 
     AlterColumn("dbo.Addresses", "city", c => c.String()); 
     AlterColumn("dbo.Addresses", "address2", c => c.String()); 
     AlterColumn("dbo.Addresses", "address1", c => c.String()); 
    } 
} 

あなたは、インデックスを削除してから、そこに任意のデータベースの移行があり、すべてがうまく(エラーなし)動作するかどうか期待通りにセットアップが実行されるコードをexcersizeしかし場合は、DEV環境に(データベース全体を削除した場合もちろん)空のデータベースを再作成すると、このエラーが再度表示されます。なぜこのエラーは最初に起こっていますか?

答えて

1

私はmysqlデータベースでコードの最初のアプローチで作業していた同じ問題に直面していました。 mysqlデータベースを使用している場合は、コードから接頭辞dboを削除してみてください。だから上向きの書き込みCreateIndex("Addresses", new[] { "address1", "city", "state", "postal_code" }, unique: true, name: "IX_address_unique");。ダウン書き込み用DropIndex("Addresses", "IX_address_unique");。 これはうまくいくはずです。

+0

残念ながら、それは私にとってはうまくいきませんでした。代わりにデータ注釈を使用してみてください。 –

関連する問題