5

데이터베이스 컨텍스트의 네임 스페이스 이름과 관련된 코드 첫 번째 구성이 변경되어 프로젝트가 재구성되었습니다. 이 시점에서 필자는 "InitialCreate"라는 하나의 스캐 폴딩 마이그레이션을 사용하여 데이터베이스 __MigrationHistory 테이블에 MigrationId 및 클래스의 네임 스페이스 이름과 클래스 이름이 포함 된 ContextKey이 포함 된 단일 행이 포함되었습니다.컨텍스트 키가 변경된 스캐 폴드 마이그레이션

Get-Migrations을 실행하면 내 동료의 조언에 따라 ContextKey을 변경 한 후 결과가 반환되지 않고 "InitialCreate"이전이 올바르게 열거되었습니다.

내 마이그레이션의 연속성이 깨지지 않도록 어떤 단계를 거쳐야합니까? ContextKey의 이름을 직접 바꿀 필요가 없으므로 어떻게해야합니까? 당연히 하나의 적용된 마이그레이션에 대해서는 큰 문제가 아니지만 수십 개의 적용된 마이그레이션에 대해서는 큰 고통이 될 것입니다.

답변

12

오랫동안이 문제에 빠져서 질문했습니다 - 답변 - 그것 here. 하나 포함 된 모델과 매핑 만 마이그레이션 구성을 포함하는 다른 하나 -

public class MyMigrationConfiguration : DbMigrationsConfiguration<MyMigrationContext> 
{ 
    public MyMigrationConfiguration() 
    { 
     AutomaticMigrationsEnabled = false; 
     AutomaticMigrationDataLossAllowed = false; 
     MigrationsNamespace = "My.Migrations.Assembly"; 
     MigrationsDirectory = "My/Migrations/Directory"; 
     ContextKey = "MyContexKey"; // You MUST set this for every migration context 
    } 
} 
+0

통찰력을 가져 주셔서 감사합니다. –

3

DbMigrationsConfiguration{TDbContext} 클래스에는 명시 적으로 컨텍스트 키를 설정할 수있는 ContextKey (EF6 및 "다중 점유자 마이그레이션"기능)이라는 속성이 있다는 것을 알게되었습니다. 패키지 관리자 콘솔에서 Enable-Migrations 명령의 -ContextTypeName 매개 변수를 사용하면이 속성이 설정됩니다.

첫 번째 이전이 적용되면 컨텍스트 키가 변경 될 수있는 것처럼 보이지 않지만 구성 클래스 유형 이름이 변경된 후 컨텍스트 키를이 방식으로 설정하는 옵션을 사용하면 데이터베이스의 불일치를 용인 할 수 있습니다.

2

내가 가지고 두 개의 분리 된 데이터베이스 프로젝트를 다음 EF 워드 프로세서에서는 우선은 다음과 같이 정의 마이그레이션 구성을 만들어야합니다 here 컨텍스트 키에 대한 설명을 찾을 수 있습니다 모든 마이그레이션.

    : 내가 프로젝트를 포함하는 모델로 마이그레이션을 포함하는 프로젝트를 통합 한 등

    마지막으로 나는 새로운 마이그레이션을 추가하거나 최신 또는 그 단계를함으로써 이전 상태로 스키마를 마이그레이션 데이터베이스를 유지하기 위해 불가능에 문제를 해결
  • 병합 된 프로젝트의 네임 스페이스를 모든 마이그레이션 및 구성 자체를 새 네임 스페이스 값으로 변경했습니다. 예상대로

    USE [DatabaseName] 
    
    GO 
    
    UPDATE [dbo].[__MigrationHistory] 
        SET [ContextKey] = N'NewNamepacePlusConfigurationClassName'  
    WHERE ContextKey= N'NamepacePlusConfigurationClassName' 
    
    GO 
    
  • 내가 구성으로 마이그레이션을 포함하는 프로젝트를 빌드가

지금 모든 것을, 나는 문을 사용하여 이전 버전과 스키마를 변경도 할 수있어 작품 :

  • 나는 데이터베이스에 대해 다음 문을 실행

    Update-Database -TargetMigration PreviousMigration 
    
  • +0

    열이 _MirtationHistory에 없으면 어떻게됩니까? –