0

저는 EF 5를 사용하고 있습니다. 우리는 프로젝트를 코드 우선 마이그레이션을 사용하도록 변환하려고합니다.EF 코드 우선 마이그레이션 상태 재설정

원래 DBContext 파일에는 context.Database.Create를 사용하여 DB가없는 경우 DB를 만드는 IDataBaseInitializer 구현이있었습니다.

내가 마이그레이션 개념을 테스트하고 싶었

그래서 원래 명령을 실행 :

사용-마이그레이션은 -ProjectName MyProjectName는

추가 - (이 성공적으로 Configuration.cs 파일로 마이그레이션 폴더를 생성) 마이그레이션 초기 -ProjectName MyProjectName (내 모델 클래스와 일치하는 스크립트 파일을 성공적으로 만들었습니다)

이 시점에서 업그레이드 시나리오를 테스트하려고 했으므로 모델에 tmp 필드를 만들고 Add-Migration 명령을 다시 사용했습니다. 그것은 예상대로 작동하는 것처럼 보였다.

그러나이 시점에서 나는 내 상태를 재설정하고 싶었습니다. VS에서 내 모든 변경 사항을 되돌리고 디스크에서 Migrations 폴더의 파일을 제거하고 내 DB에서 __MigrationsHistory 테이블을 제거하고 DB를 완전히 삭제하려고했습니다. 내가 무엇을해도 새로운 초기 마이그레이션이 포함 된 스크립트를 만들 수있는 새로운 Add-Migration을 얻을 수 없습니다. 항상 다음과 같이 나타납니다 ... 이것은 내가 원래 만든 테스트 가치입니다.

public partial class Initial : DbMigration 
{ 
    public override void Up() 
    { 
     DropColumn("dbo.EventTrackingRecords", "TestValue"); 
    } 

    public override void Down() 
    { 
     AddColumn("dbo.EventTrackingRecords", "TestValue", c => c.String()); 
    } 
} 

나는이 초기 정보를 어디에 보관하고 있는지 이해할 수 없습니다. 흥미로운 점은 DB를 삭제 한 후 프로그램을 실행하면 모델을 기반으로 기대했던 DB를 다시 만들 수 있지만 __MigrationHistory 테이블도 생성된다는 것입니다. 나는 context.Database.Create() 명령이 이것을 어떻게하는지 이해하지 못한다.

+0

내가 게시 한 'Initial' 클래스의 내용이 기록이라고 가정합니다. 거기에서'DropColumn'과'AddColumn'을 제거하고 테스트를 다시 실행 해 보았습니까? – Khan

+0

모든 모델을 포함하여 만든 원래의 Initial 클래스가 없습니다. 나는 모든 것을 되 돌렸고 단지 다시 할 수 있다고 생각했다. DropColumn 및 AddColumn 제거 시도했다. 단지 똑같은 것을 만듭니다. –

답변

0

EF는 __MigrationHistory 테이블을 만들어 DB를 최신 상태로 유지하고 그렇지 않은 경우 경고합니다.

모델에서 무언가를 편집하고 추가 마이그레이션을 실행하면 update-database를 실행하여 새 마이그레이션을 만들 수 있습니다. EF는 새로운 것을 생성하는 동안 보류중인 마이그레이션을 허용하지 않습니다.

따라서 모델 중 하나에 속성을 추가 한 다음 마이그레이션을 만드는 경우 속성을 삭제하는 새 마이그레이션을 만들기 전에 데이터베이스를 업데이트해야합니다.

희망이 도움이됩니다.

관련 문제