0

필자는 Entity Framework Code-First를 읽고 사용하기 시작했습니다. 로컬 컴퓨터 (DefaultConnection)에서 정상적으로 작동하지만 프로덕션 서버 (AppHarbor의 SQL Server 애드온)에서 작동이 중지 된 것으로 보입니다.내 __MigrationHistory 테이블이 숨겨지지 않습니다. EF 코드가 처음 사용 중지 되었습니까?

내가 알아챈 한 가지는 __MigrationHistory 폴더가 시스템 테이블로 숨겨져 있지 않다는 것입니다. 나는 자동으로 마이그레이션하는 방법을 사용하고

Screenshot

on AppHarbor's blog을 설명했다. 나는 appharbor 데이터베이스에 다시 작동 코드 먼저 좀하고 싶습니다

public class DatabaseContext : DbContext { 
     public DatabaseContext() : base("DefaultConnection") { } 
     public DbSet<UserProfile> UserProfiles { get; set; } 
     public DbSet<Challenge> Challenges { get; set; } 
     public DbSet<Feedback> Feedbacks { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
      Database.SetInitializer(new MigrateDatabaseToLatestVersion<DatabaseContext, Configuration>()); 
     } 
    } 

:
이 내 DatabaseContext 클래스입니다. 다시 활성화하는 방법이 있습니까? 또는 생성 된 모든 마이그레이션 클래스와 __MigrationHistory를 삭제하고 DropCreateDatabaseAlways 이니셜 라이저를 사용하도록 OnModelCreating 생성자를 일시적으로 변경하여 데이터베이스를 다시 만들어야합니까? 마이그레이션을 재설정하고 현재 작성된 코드에서 마이그레이션을 시작하는 더 좋은 방법은 무엇입니까?

답변

1

코드 첫 번째 마이그레이션은 __MigrationHistory라는 테이블을 찾고 있습니다. 시스템 테이블로 표시되는지 여부는 상관하지 않습니다.

이 가이드에서는 SQL Server CE를 사용하고 있으며 해당 공급자를 사용하는 경우 코드 퍼스트는 시스템 테이블로 표시하지 않습니다.

개발 컴퓨터에서 다른 버전의 SQL Server를 사용하고 있으므로 시스템 테이블로 볼 수 있습니다.

일부 데이터베이스에서 시스템 테이블로 표시되는 이유는이를 숨기는 것입니다. 마이그레이션은 작업을 수행하기 위해 시스템 테이블이 아니어도됩니다.

Entity Framework 팀의 Arthur Vickers 블로그 게시물 this에서 자세한 내용을 볼 수 있습니다. 여기서는 __MigrationHistory를 Sql Server의 비 시스템 테이블로 만드는 방법을 보여줍니다.

3

도움을 줄 수 정확히 무엇인가 기존 프로덕션 시스템으로 마이그레이션을 구현하고자 할 때도 마찬가지였습니다. 다음 T-SQL 명령을 사용하여 __MigrationHistory 테이블에서 is_ms_shipped 플래그를 설정할 수 있습니다.

EXEC sys.sp_MS_marksystemobject __MigrationHistory