2015-01-27 7 views
6

Stiamo utilizzando il nuovo metodo DbMigration.SqlFile in EF Migrations 6.1.2 per eseguire uno script di migrazione nella nostra migrazione. In base a the documentation, il file deve essere relativo all'AppDomain BaseDirectory corrente. Abbiamo incluso questi file nel progetto e li abbiamo impostati per copiare nella directory di output. Localmente funziona tutto bene. Ottengono l'output nella directory bin e funzionano correttamente.DbMigration.SqlFile differenza nella directory di base

Quando si distribuisce il software su un server su cui è in esecuzione IIS, la migrazione non riesce, perché all'improvviso si aspetta che i file siano relativi alla radice. Quando li copio lì, la migrazione funziona.

Come è possibile utilizzare DbMigration.SqlFile in modo che venga eseguito correttamente sia localmente che sul server?

risposta

4

Il metodo SqlFile utilizza lo CurrentDomain.BaseDirectory se viene fornito un percorso relativo. Una soluzione alternativa è mappare il percorso da soli e dare un percorso assoluto al metodo. Una soluzione sarebbe simile a questa:

var sqlFile = "MigrationScripts/script1.sql"; 
var filePath = Path.Combine(GetBasePath(), sqlFile); 
SqlFile(filePath); 

public static string GetBasePath()   
{  
    if(System.Web.HttpContext.Current == null) return AppDomain.CurrentDomain.BaseDirectory; 
    else return Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"bin"); 
} 

BasePath soluzione prelevata dalla: Why AppDomain.CurrentDomain.BaseDirectory not contains "bin" in asp.net app?

Problemi correlati