다음을 통해 공유


migrate.exe 사용

Code First 마이그레이션은 Visual Studio 내부에서 데이터베이스를 업데이트하는 데 사용할 수 있지만 명령줄 도구 migration.exe를 통해 실행할 수도 있습니다. 이 페이지에서는 migration.exe를 사용하여 데이터베이스에 대해 마이그레이션을 실행하는 방법에 대한 간략한 설명을 제공합니다.

참고 항목

이 문서에서는 기본 시나리오에서 Code First 마이그레이션을 사용하는 방법을 알고 있다고 가정합니다. 방법을 모르는 경우, 계속하기 전에 Code First 마이그레이션을 읽어야 합니다.

migrate.exe 복사

NuGet을 사용하여 Entity Framework를 설치하면 migration.exe는 다운로드한 패키지의 도구 폴더 안에 있습니다. <프로젝트 폴더>\packages\EntityFramework에서<version>\tools

migration.exe가 있으면 마이그레이션이 포함된 어셈블리 위치에 복사해야 합니다.

애플리케이션이 4.5가 아닌 .NET 4를 대상으로 하는 경우 Redirect.config도 해당 위치로 복사하고 이름을 migrate.exe.config로 바꿔야 합니다. 이는 migration.exe가 Entity Framework 어셈블리를 찾을 수 있도록 올바른 바인딩 리디렉션을 가져오기 위한 것입니다.

.NET 4.5 .NET 4.0
.NET 4.5 Files .NET 4.0 Files

참고 항목

migrate.exe는 x64 어셈블리를 지원하지 않습니다.

migration.exe를 올바른 폴더로 이동한 후에는 이를 사용하여 데이터베이스에 대한 마이그레이션을 실행할 수 있습니다. 모든 유틸리티는 마이그레이션을 실행하도록 설계되었습니다. 마이그레이션을 생성하거나 SQL 스크립트를 만들 수 없습니다.

옵션 보기

Migrate.exe /?

위의 옵션은 유틸리티와 관련된 도움말 페이지를 표시합니다. 이 작업을 수행하려면 migration.exe를 실행하는 동일한 위치에 EntityFramework.dll이 있어야 합니다.

최신 마이그레이션으로 마이그레이션

Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"

migration.exe를 실행할 때 유일한 필수 매개 변수는 실행할 마이그레이션이 포함된 어셈블리이지만 구성 파일을 지정하지 않으면 모든 규칙 기반 설정을 사용합니다.

특정 마이그레이션으로 마이그레이션

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /targetMigration="AddTitle"

특정 마이그레이션까지 마이그레이션을 실행하려면 마이그레이션 이름을 지정하면 됩니다. 이렇게 하면 지정된 마이그레이션에 도달할 때까지 필요에 따라 이전의 모든 마이그레이션이 실행됩니다.

작업 디렉터리 지정

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /startupDirectory="c:\\MyApp"

어셈블리에 종속성이 있거나 작업 디렉터리를 기준으로 파일을 읽는 경우 startDirectory를 설정해야 합니다.

사용할 마이그레이션 구성 지정

Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"

여러 마이그레이션 구성 클래스(DbMigrationConfiguration에서 상속되는 클래스)가 있는 경우 이 실행에 사용할 클래스를 지정해야 합니다. 이는 위와 같이 스위치 없이 선택적 두 번째 매개 변수를 제공하여 지정됩니다.

연결 문자열 제공

Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"

명령줄에서 연결 문자열을 지정하려면 공급자 이름도 제공해야 합니다. 공급자 이름을 지정하지 않으면 예외가 발생합니다.

일반적인 문제

오류 메시지 솔루션
처리되지 않은 예외: System.IO.FileLoadException: 파일 또는 어셈블리 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 해당 어셈블리 참조와 일치하지 않습니다. (HRESULT에서 예외 발생: 0x80131040) 이는 일반적으로 Redirect.config 파일 없이 .NET 4 애플리케이션을 실행하고 있음을 의미합니다. Redirect.config를 migration.exe와 동일한 위치에 복사하고 이름을 migration.exe.config로 바꿔야 합니다.
처리되지 않은 예외: System.IO.FileLoadException: 파일 또는 어셈블리 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 해당 어셈블리 참조와 일치하지 않습니다. (HRESULT에서 예외 발생: 0x80131040) 이 예외는 Redirect.config가 migration.exe 위치에 복사된 .NET 4.5 애플리케이션을 실행 중임을 의미합니다. 앱이 .NET 4.5인 경우 내부에 리디렉션이 포함된 구성 파일이 필요하지 않습니다. migrate.exe.config 파일을 삭제합니다.
오류: 보류 중인 변경 내용이 있고 자동 마이그레이션이 사용하지 않도록 설정되어 있으므로 현재 모델과 일치하도록 데이터베이스를 업데이트할 수 없습니다. 보류 중인 모델 변경 내용을 코드 기반 마이그레이션에 작성하거나 자동 마이그레이션을 사용하도록 설정합니다. 자동 마이그레이션을 사용하려면 DbMigrationsConfiguration.AutomaticMigrationsEnabled를 true로 설정합니다. 이 오류는 모델 변경 내용에 대처하기 위해 마이그레이션을 만들지 않았고 데이터베이스가 모델과 일치하지 않을 때 마이그레이션을 실행하는 경우 발생합니다. 모델 클래스에 속성을 추가한 다음, 데이터베이스를 업그레이드하는 마이그레이션을 만들지 않고 migration.exe를 실행하는 것이 이에 대한 예제입니다.
오류: 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 멤버에 대한 형식이 확인되지 않습니다. 이 오류는 잘못된 시작 디렉터리를 지정하여 발생할 수 있습니다. migration.exe의 위치여야 합니다.
처리되지 않은 예외: System.NullReferenceException: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
   System.Data.Entity.Migrations.Console.Program.Main(String[] args)에서
이 오류는 사용 중인 시나리오에 필수 매개 변수를 지정하지 않았기 때문에 발생할 수 있습니다. 예를 들어 공급자 이름을 지정하지 않고 연결 문자열을 지정합니다.
오류: 'ClassLibrary1' 어셈블리에서 둘 이상의 마이그레이션 구성 형식이 발견되었습니다. 사용할 이름을 지정합니다. 오류에 따르면 지정된 어셈블리에는 둘 이상의 구성 클래스가 있습니다. 사용할 스위치를 지정하려면 /configurationType 스위치를 사용해야 합니다.
오류: 파일이나 어셈블리 '<assemblyName>' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 지정한 어셈블리 이름 또는 코드베이스가 잘못되었습니다. (HRESULT에서 예외 발생: 0x80131047) 이 오류는 어셈블리 이름을 잘못 지정하거나 어셈블리 이름을 지정하지 않아서 발생할 수 있습니다.
오류: 파일이나 어셈블리 '<assemblyName>' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다. 이 오류는 x64 애플리케이션에 대해 migration.exe를 실행하려는 경우에 발생합니다. EF 5.0 이하는 x86에서만 작동합니다.