Domanda

Abbiamo recentemente passato alle migrazioni dei dati del quadro di entità e sto lavorando su alcuni script di automazione della creazione per la nostra app MVC.Posso eseguire con successo le migrazioni dal nostro server Build utilizzando lo strumento MigraRe.exe in 4.3 se ho un Web.config per puntarlo a. il comando guarda qualcosa come:

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

Tuttavia, per vari motivi vorrei evitare di usare il web.config e semplicemente passare nella stringa di connessione corretta al momento della migrazione:

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
.

Questo non funziona.Peggio ancora, schianta migrazione.exe con una nullreferenceexception.La stringa di connessione è identica a quella che usiamo nel nostro web.config.

Qualcuno ha incontrato questo prima?Il mio formato della stringa di connessione è sbagliato?Bug?

È stato utile?

Soluzione

OK, ci siamo capiti.Quando si esegue senza Web.config, il parametro ConnectionProviderName deve essere trasferito anche in:

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
.

Ho confermato che funziona.

Altri suggerimenti

Devo ancora trovare una soluzione che funziona effettivamente senza specificare il file web / app.config.Vedi sotto.

Tuttavia, se è possibile accettare una rete Web / app.config e sovrascrivere la stringa di connessione come parametri della riga di comando, quindi i seguenti lavori con Entity Framework 5.0 Nuget e .NET 4.5.Dovrebbe anche funzionare per .NET 4.0 con Document Workarounds . Esempio Struttura della cartella:

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
.

fine della soluzione.


.

Omettendo il file di configurazione:

Se cerca di omettere il file di configurazione, ho sempre ottenuto la seguente eccezione, non importa quello che ho provato.Non ho provato EF 4.3, quindi sospetto che il comportamento sia cambiato tra 4.3 e 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.
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top