2015-08-20 8 views
24

È possibile eseguire lo script sql utilizzando le migrazioni prima del codice?Possiamo eseguire lo script sql usando le migrazioni prima del codice?

Sono nuovo al primo codice e se voglio salvare le mie modifiche in un file di script sql prima del comando update-database di migrazione, è possibile?

Se possibile, fornire i passaggi necessari per farlo. Inoltre, se lo script viene generato, è possibile che io possa eseguire quello script usando la migrazione?

risposta

39

Per prima cosa è necessario creare una migrazione.

Add-Migration RunSqlScript 

Quindi nel file di migrazione generato è possibile scrivere il codice SQL.

// PLAIN SQL 
Sql("UPDATE dbo.Table SET Created = GETDATE()"); 

// FROM FILE 
var sqlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Custom.sql"); 
Sql(File.ReadAllText(sqlFile)); 

quindi si esegue

Update-Database 
+1

Questo funziona come per magia per me. Ho ulteriormente studiato e ho scoperto che possiamo aggiungere procedure memorizzate pre-create con questo utilizzando il codice seguente. var sqlFile = Path.Combine (AppDomain.CurrentDomain.BaseDirectory, @ "Custom.sql"); Sql (File.ReadAllText (SQLFile)); –

+0

Aggiungerò anche la mia risposta. – Rikard

+5

Dove collochi i tuoi file SQL nel progetto in modo da poterli afferrare in fase di runtime? 'Path.Combine (AppDomain.CurrentDomain.BaseDirectory' mi mette nella directory di debug. – webworm

5

come SQL, abbiamo un altro metodo SQLFile. puoi usare direttamente quello

+0

hai un esempio? –

+0

Scrivi sotto la riga nel tuo Generated Migration.cs
SqlFile("Custom.sql")
Ref - [MSDN]: https://msdn.microsoft.com/en-us/library/dn857435(v=vs.113).aspx –

3

Quello che mi piace fare è incorporare lo script SQL come risorsa nell'assieme e utilizzare il metodo SqlResource. Ho testato questo approccio con Visual Studio 2017 15.5.6.

In primo luogo è necessario creare un file di migrazione:

  1. In Visual Studio assicurarsi di impostare come avvio del progetto del progetto in cui è definito il tuo DbContext
  2. In Visual Studio aprire il PMC: Visualizza -> altre finestre -> Console di Package manager
  3. In PMC Impostare il progetto predefinito per il progetto che contiene il DbContext
  4. Se si dispone sia di base EF e EF 6.x installati:

    EntityFramework\Add-Migration RunSqlScript

  5. Se avete solo EF 6.x installata:

    Add-Migration RunSqlScript

aggiungere uno script SQL nella cartella di migrazione (nomino con lo stesso prefisso come la migrazione File)

Migration folder in the Solution Explorer

In th La finestra delle proprietà del file si assicura che l'azione di compilazione sia "Risorsa incorporata" Si noti che non è necessario copiare nella cartella di output poiché lo script sql verrà incorporato nell'assembly.

Aggiornare il metodo di Up in the RunSqlScript migrazione

public override void Up() 
{ 
    string sqlResName = typeof(RunSqlScript).Namespace + ".201801310940543_RunSqlScript.sql"; 
    this.SqlResource(sqlResName); 
} 

Spero che questo aiuta

+0

mi è piaciuto questo metodo. Nota: se si esegue questa operazione, non provare ad annidare '.sql' nel file di migrazione ... questo interrompe l'embedded della risorsa. lasciarlo non annidato. –