2017-05-15 10 views
1

이제 EntityFramework CodeFirst 마이그레이션을 사용합니다. EntityFramework CodeFirst 마이그레이션을 사용하기 전에 데이터베이스 테이블과 인덱스가 오래 전에 생성되었습니다. 테이블은 myTable이며 열은 vchMyColumnA이고 인덱스는 ColumnA입니다. EntityFramework CodeFirst 마이그레이션을 사용했기 때문에 EntityFramework CodeFirst 마이그레이션을 사용하여 myTable에 새 열을 추가했습니다.EntityFramework를 통해 인덱스 제거 CodeFirst 마이그레이션

Index ColumnA를 삭제해야합니다.

  1. 우리가 EntityFramework CodeFirst 마이그레이션을 통해 그것을 할 필요가 있는가, 또는 우리는 단지 인덱스를 삭제하는 스크립트를 실행할 수 있습니까?

  2. EntityFramework CodeFirst 마이그레이션을 통해 인덱스를 삭제해야한다면 어떻게해야합니까? 패키지 관리자 콘솔에서 나는 추가 마이그레이션 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

죄송합니다. 의견을 쓰기가 어렵습니다. 마이그레이션에 동등한 SQL을 삽입 할 수 있습니다.

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

그게 효과가! 고맙습니다 ! Down() 코드에는 무엇을 넣을까요? 이 코드는 여전히 괜찮습니까? CreateIndex ("dbo.myTable", "vchMyColumnA"); – faujong

+1

예, 색인이 다시 추가됩니다. –

+0

도움 주셔서 감사합니다. – faujong