2017-01-19 4 views
0

마이그레이션을 생성 할 때 생성 된 마이그레이션이 비어 있도록 DB에 특정 테이블 (보고서)이 없다고 생각하지 않습니다. 그럼에도 불구하고, 나는 세대가 원활하게 진행될 수있는 모든 코드를 보유하고 있습니다.존재하지 않는 테이블로 마이그레이션 문제 추가

이 코드는 오래되어서 오늘까지 미완성 상태로 남았습니다. 또한, 위의 테이블을 참조하여 마이 그 레이션을 찾을 수 없지만, 어떤 이유로 테이블이 이미 DB에 있다고 생각합니다. 예를 들어 아래에 표시된 것처럼 매핑 클래스에서 테이블 이름을 변경하면 RenameTable 명령으로 마이그레이션이 생성됩니다. 그리고 물론 업데이트 데이터베이스 명령이 실패합니다.

this.ToTable("Report"); 

어떻게 해결할 수 있습니까?

+0

IF EXIST를 사용하여 SQL 스크립트를 작성하면 마이그레이션에서 SQL (",,,")을 사용하여이 테이블을 삭제 한 다음이 테이블을 다시 추가 할 수 있습니다. –

+0

@KD 이후 테이블이 존재하지 않습니다, 그 스크립트는 효과가 없을 것 같아요? 그럼에도 불구하고 생성 된 마이그레이션에 다음 줄을 추가하려고 시도했습니다. Sql ("IF가 존재합니다 (선택 * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '보고서') DROP 테이블 보고서"; 그런 다음 예상대로 아무런 영향없이 마이그레이션을 다시 생성했습니다. 내가 한 말에 뭔가 빠졌습니까? – rsy

+1

EF는'__MigrationHistory' 테이블로 예상 데이터베이스 상태를 추적 중입니다. 그래서 이전의 마이 그 레이션에서'Report '가 존재했다는 것을 잠시 생각해보고 누군가가 수동으로 마이 그 레이션'Up'과'Down' 코드를 변경하여 테이블을 만들지 않았다고 가정 해 봅시다. EF는 이제 저장된 마이그레이션 기록에 따라 테이블을 계속 사용할 수 있다고 생각할 것이며 마이그레이션을 수행하기 위해 테이블을 생성하는 대신 코드를 생성하는 코드를 생성합니다. 제공된 정보가 모두 명확하지 않습니다. – grek40

답변

2

으로는 의견에서 지적, 문제는 다음과 같은 해킹을 사용하여 고정 :

  1. 는 엔티티 제거가 사용 된 모든 위치를 주석 처리합니다.
  2. 마이그레이션을 생성하고 위/아래 방법의 코드를 지우십시오.
  3. 마이그레이션을 적용하십시오.
  4. 엔티티를 다시 추가하십시오.
  5. 다른 마이그레이션을 생성하십시오. 이제 테이블을 추가하는 코드가 생성됩니다.