2012-03-14 3 views
19

최근에 Entity Framework 데이터 마이그레이션으로 전환했으며 MVC 응용 프로그램 용 일부 빌드 자동화 스크립트 작업을하고 있습니다. 내가 가리키는 Web.config 4.3 에서 migrate.exe 도구를 사용하여 빌드 서버에서 성공적으로 마이그레이션을 실행할 수 있습니다.Web/App.config없이 Entity Framework migrate.exe 도구를 실행하는 올바른 형식은 무엇입니까?

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 
:

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

그러나 여러 가지 이유로 내가의 Web.config 사용하지 그냥 마이그레이션시 올바른 연결 문자열을 전달하고 싶습니다 : 명령은 뭔가처럼 보인다

이것은 작동하지 않습니다. 더 나쁜 것은 migrate.exe와 NullReferenceException이 충돌합니다. 연결 문자열은 Web.config에서 사용하는 것과 동일합니다.

누구나 전에이 문제가 발생 했습니까? 연결 문자열 형식이 잘못 되었습니까? 곤충?

답변

23

좋아, 우리가 알아 냈어. 나는이 작동하는지 확인했다

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 

:의 Web.config없이 실행할 때 connectionProviderName 매개 변수도 전달해야합니다.

+2

+1 누락 된 매개 변수에 대해 NullPointerException을 얻는 것은 여전히 ​​잘못된 것입니다. - EF에 대한 연결 사이트가 있는지는 잘 모르겠지만,보고 해 주시면 고맙겠습니다! 감사! – Rup

12

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

그러나 web/app.config를 제공하고 명령 줄 매개 변수로 연결 문자열을 다시 정의 할 수 있으면 다음은 Entity Framework 5.0 nuget 및 .NET 4.5에서 작동합니다. 또한 documented workarounds으로 .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. 
+0

여기까지했던 것처럼 정확히했는데, 어쨌든 "스택 호출과 함께 예외가 발생했습니다"라는 오류 메시지가 나타납니다. Migrate.exe는 진정으로 최저 품질 인 것 같습니다. – bwerks

+0

상대 경로에 문제가있는 것으로 보입니다. http://stackoverflow.com/questions/28724546/cant-run-code-first-migrations-using-migrate-exe/29853289#29853289 – thepaulpage

+0

비슷한 문제가 있었지만 ConfigurationManager를 통해 내 코드로 밝혀졌습니다. ConnectionStrings)가 필요합니다. 나는 이것을 두 번 확인하는 것이 좋습니다. –

관련 문제