새 마이그레이션을 추가하고 있지만이 메시지는 다음과 같습니다.
다음 명시 적 마이그레이션이 보류 중이므로 명시 적 마이그레이션을 생성 할 수 없습니다. [201203170856167_left]. 새 명시 적 마이그레이션을 생성하기 전에 보류중인 명시 적 마이그레이션을 적용하십시오.
아무도 나를 도울 수 있습니까?
새 마이그레이션을 추가하고 있지만이 메시지는 다음과 같습니다.
다음 명시 적 마이그레이션이 보류 중이므로 명시 적 마이그레이션을 생성 할 수 없습니다. [201203170856167_left]. 새 명시 적 마이그레이션을 생성하기 전에 보류중인 명시 적 마이그레이션을 적용하십시오.
아무도 나를 도울 수 있습니까?
답변:
애플리케이션에 처리되지 않은 마이그레이션이 있으며 Update-Database
다른 마이그레이션을 추가하기 전에 실행 해야 함을 알려줍니다 .
-StartupProject ContentHub.Database
Update-Database
제공> Unable to update database to match the current model because there are pending changes
나는 같은 문제가 있었다. 분명히 엔티티 프레임 워크는 데이터베이스에 연결할 수 없을 때이 오류를 생성합니다. 따라서 다른 문제를 검색하기 전에 액세스 할 수 있는지 확인하십시오.
패키지 관리자 콘솔에서 "update-database"를 실행하여 변경 사항을 데이터베이스에 푸시하거나 마이그레이션 폴더에서 보류중인 마이그레이션 파일 ([201203170856167_left])을 삭제 한 다음 "add-migration"을 다시 실행하여 편집 내용을 기반으로 새로운 마이그레이션을 만듭니다.
이 오류는 마이그레이션이 더 이상 인식되지 않음을 의미 할 수도 있습니다. 이것은 Migrations.Configuration에서 ContextKey의 값을 변경 한 후 나에게 발생했습니다. 해결책은 단순히 데이터베이스 테이블 "__MigrationHistory"에서 ContextKey를 업데이트하는 것입니다 (또는 내가 추측하는 Configuration 클래스의 값을 되돌림). 애플리케이션의 ContextKey와 네임 스페이스가 일치해야합니다.
연결 문자열을 다시 확인하십시오.
연결중인 사용자에게 여전히 읽기 [__MigrationHistory]
권한과 스키마 편집 권한 이 있는지 확인하십시오 .
통합 보안 (Windows Auth)을 사용하여 add-migration 명령을 직접 실행하도록 앱 또는 웹 구성 파일의 연결 문자열을 변경해 볼 수도 있습니다 .
예를 들면 :
connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;"
이 연결 문자열은 DbContext가있는 프로젝트의 App.config 파일에 저장됩니다.
명령 줄에서 시작 프로젝트를 지정하거나 DbContext
, Configuration
및 마이그레이션 폴더가 있는 프로젝트를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택할 수 있습니다. 나는 진지하다. 이것은 실제로 도움이 될 수있다.
Integrated Security
수정은 훌륭하게 작동합니다!
같은 문제가 있었고 위의 답변에서 몇 가지 힌트로 해결할 수있었습니다.
패키지 관리자 콘솔에서 "update-database -verbose"를 사용하여 마이그레이션이 연결을 시도하는보다 구체적인 정보를 얻으십시오. (내 경우에는 시작 프로젝트가 올바르게 설정되지 않았 음을 확인하는 데 도움이되었습니다 ...)
사용하지 않았다면 Update-Database
그냥 삭제할 수 있습니다. 업데이트를 실행 한 경우을 사용하여 롤백 Update-Database -TargetMigration "NameOfPreviousMigration"
한 다음 삭제합니다.
참조 : http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/
이 텍스트를 여기에서 직접 복사했습니다 . 마지막 마이그레이션 추가 명령을 실행 취소하려면 어떻게합니까?
이 문제가 발생하면 add-migration cmdlet에 매개 변수를 추가해보십시오. 예를 들어 시작 프로젝트와 연결 문자열 이름을 지정하면 EF가 대상 데이터베이스를 찾는 데 도움이 될 수 있습니다.
add-migration Delta_Defect_0973 -ConfigurationTypeName your.namespace.ContextClassName -StartUpProject DeltaProject -ConnectionStringName DeltaSQL
어디:
Delta_Defect_0973 은 마이그레이션의 이름입니다.
your.namespace.ContextClassName 은 마이그레이션 폴더에있는 구성 클래스의 이름이며 전체 이름 공간이 접두어로 붙습니다.
DeltaProject 는 web.config 또는 app.config 파일이있는 기본 프로젝트의 이름입니다.
DeltaSQL 은 web.config 또는 app.config 파일에 정의 된 연결 문자열의 이름입니다.
내 2 센트 :
내 시나리오 :
해결책:
이 문제를 해결하기 위해 더 명시적인 매개 변수를 제공했습니다.
Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose
이 동작을 기본값으로 허용하도록 app.config 폴더에 설정을 설정할 수 있으므로 매번 명시적인 매개 변수를 제공 할 필요가 없습니다. 그러나 나는 이것을하는 방법을 잘 모르겠습니다.
-ConnectionStringName
이 대안이며, 이름으로 설정에서 연결 문자열을 가져옵니다
모호함과 오류가 있습니다. 가장 좋은 방법은 현재 마이그레이션 파일을 제외하고 새 마이그레이션 ( add-migration ) 파일을 만든 다음 새 마이그레이션의 내용을 제외 된 파일에 복사하고 다시 포함하고 update-database 명령을 실행하는 것입니다.
update-database
한 후 명령을 내 시도 add-migration
명령을하며 일
나는 다음과 같은 문제를 해결했습니다.
내 로컬 데이터베이스가 __MigrationHistory
채워 지지 않았 거나 존재 하지 않았습니다 . 수동으로 테이블을 만든 다음 해당 테이블의 데이터를 PROD에서 내 로컬 데이터베이스로 마이그레이션했습니다. 이로 인해 VS는 마이그레이션이 적용되었다고 생각했습니다.
팁 :-Script
확실하지 않은 경우 마이그레이션 명령에 항상 스위치 를 사용하는 것이 좋습니다 . 또한 Update-Database
실제로 무엇을하는지 이해하는 데 도움 이됩니다.
다음을 실행하여 데이터베이스를 업데이트 한 다음 수동으로 적용 할 수있는 스크립트를 얻거나 -Script 태그없이 다시 실행합니다.
들어 Update-Database
나는 다음을 실행합니다 :
Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive
SQL_AzureLive
내 구성에서 명명 된 연결 문자열은 어디에 있습니까 ?
그런 다음 SQL이 올바른지 확인하고 적용하여 수행 할 수 있습니다. 다른 많은 사람들이 연결 문자열이 잘못되었거나 유효하지 않다고 말했듯이이 오류가 발생합니다.
나를 위해 Migrations
폴더 에서 마이그레이션 파일 (귀하의 경우 "201203170856167_left")을 삭제 한 다음 패키지 관리자 콘솔에서 아래 명령을 실행했습니다.
Add-Migration <Parameter>
Update-Database
대본
문제
마스터에서 업데이트 한 후 "Add-Migration my_migration_name"을 실행했지만 다음 오류가 발생합니다.
다음 명시 적 마이그레이션이 보류 중이므로 명시 적 마이그레이션을 생성 할 수 없습니다. [201607181944091_AddExternalEmailActivity] 새 명시 적 마이그레이션을 생성하기 전에 보류중인 명시 적 마이그레이션을 적용하십시오.
그래서 "Update-Database"를 실행하면 다음과 같은 오류가 발생합니다.
보류중인 변경 사항이 있고 자동 마이그레이션이 비활성화되어 있으므로 현재 모델과 일치하도록 데이터베이스를 업데이트 할 수 없습니다.
해결책
이 시점에서 "Add-Migration my_migration_name"을 다시 실행하면 문제가 해결되었습니다. 내 이론은 "Update-Database"를 실행하면 "Add-Migration"이 작동하는 데 필요한 모든 상태가됩니다.
나는 다른 방법을 썼다. 데이터베이스를 완전히 삭제하고 "update-database"를 다시 실행합니다.
제 경우에는 Azure의 방화벽 규칙에 IP 주소를 추가하는 것을 잊었습니다. 기본적으로 데이터베이스에 연결할 수 없어서이 오류가 발생했습니다. 특히 제 경우에는 Azure의 데이터베이스 방화벽 규칙에 IP 주소를 추가했는데 모두 잘 작동했습니다. 이 외에도 프록시 / 인터넷 연결 / DB 사용자 이름 암호 / DB 연결 문자열 등의 문제 일 수 있습니다. 또는 분명히 Update-Database 명령을 실행해야하는 보류중인 마이그레이션이있을 수 있습니다.
필자의 경우 (MS Visual Studio 사용) Visual Studio를 다시 시작하는 것만 큼 간단했습니다.