Web / app.config없이 Entity Framework Migrate.exe 도구를 실행하기위한 올바른 형식은 무엇입니까?

StackOverflow https://stackoverflow.com//questions/9705241

문제

우리는 최근에 엔티티 프레임 워크 데이터 마이그레이션으로 전환되었으며 MVC 앱을위한 일부 빌드 자동화 스크립트에서 작업하고 있습니다.4.3 에서 ib.config가 가리 킵니다. 명령을 사용하면 migrate.exe 도구를 사용하여 빌드 서버에서 마이그레이션을 성공적으로 실행할 수 있습니다. 명령은 다음과 같습니다.

ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly
    /startupdirectory:ProjectName\bin\Debug 
    /startupconfigurationfile:ProjectName\Web.config 
    /verbose
.

그러나 다양한 이유로 Web.config를 사용하지 않고 마이그레이션 할 때 올바른 연결 문자열을 전달하고자합니다.

ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly
    /startupdirectory:ProjectName\bin\Debug 
    /connectionString:"Data Source=awesomeserver;Initial Catalog=awesomedatabase;User Id=funkyuser;Password=crazypassword" 
    /verbose
.

이것은 작동하지 않습니다.더 나빠질, NullReferenceException으로 migrate.exe를 충돌합니다.연결 문자열은 우리 웹. Config에서 사용하는 것과 동일합니다.

누구나 전에이 일이 발생 했습니까?내 연결 문자열 형식이 잘못됩니까?버그?

도움이 되었습니까?

해결책

확인, 우리는 그것을 알아 냈습니다.web.config없이 실행 중일 때 ConnectionProvIdername 매개 변수도 다음과 같아야합니다.

ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly
    /startupdirectory:ProjectName\bin\Debug 
    /connectionProviderName:"System.Data.SqlClient"
    /connectionString:"Data Source=awesomeserver;Initial Catalog=awesomedatabase;User Id=funkyuser;Password=crazypassword" 
    /verbose
.

나는이 작품을 확인했다.

다른 팁

웹 / app.config 파일을 지정하지 않고 실제로 작동하는 솔루션을 아직 찾지 못했습니다.아래를 참조하십시오.

그러나 web / app.config를 제공하고 연결 문자열을 명령 줄 매개 변수로 무시할 수있는 경우 다음은 Entity Framework 5.0 NuGet 및 .NET 4.5에서 다음과 같이 작동합니다. 문서화 된 해결 방법을 사용하여 .NET 4.0을 사용해야합니다. . 예제 폴더 구조 :

trunk\MySolution.sln
trunk\run_migration.bat

trunk\MyMvc4App\MyMvc4App.csproj 
trunk\MyMvc4App\web.config

trunk\MyMvc4App\bin\MyMvc4App.dll
trunk\MyMvc4App\bin\EntityFramework.dll

trunk\packages\EntityFramework.5.0.0\tools\migrate.exe
.

run_migration.bat :

SET AssemblyName=MyMvc4App
SET StartUpDirectory=MyMvc4App\bin\
SET ConnectionString=Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User ID=XXXX;Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True
SET ConnectionStringProvider=System.Data.SqlClient
SET ConfigFilePath=%CD%\MyMvc4App\web.config
SET MigrateExe=packages\EntityFramework.5.0.0\tools\migrate.exe

%MigrateExe% %AssemblyName%.dll /startUpDirectory:%StartUpDirectory% /startUpConfigurationFile:"%ConfigFilePath%" /connectionProviderName:"%ConnectionStringProvider%" /connectionString:"%ConnectionString%" /verbose
pause
.

솔루션의 끝.


구성 파일 생략 :

구성 파일을 생략하려고하면 내가 시도한 내용에 상관없이 항상 다음 예외가 있습니다.EF 4.3을 시도하지 않았으므로 동작이 4.3에서 5.0 사이에서 변경된 것으로 의심합니다.

System.Data.Entity.Migrations.Design.ToolingException: Exception has been thrown by the target of an invocation.
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.Console.Program.Run()
   at System.Data.Entity.Migrations.Console.Program.Main(String[] args)
ERROR: Exception has been thrown by the target of an invocation.
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top