Genera script SQL completo dalle migrazioni del codice EF 5 First


Risposte:


287

L'API sembra essere cambiata (o almeno non funziona per me).

L'esecuzione di quanto segue nella console di Package Manager funziona come previsto:

Update-Database -Script -SourceMigration:0

14
Mi rendo conto che questa è la risposta corretta, ma come hai scoperto che 0 funziona quando il parametro è normalmente una stringa ?!
Dave R,

27
Solo prove ed errori davvero dopo aver provato tutto ciò a cui potevo pensare per indurlo a lavorare :)
Matt Wilson,

1
Questo crea una copia esatta del database? Incluso il contenuto della tabella?
Multitut,

2
@Multitut: no, farà solo la struttura.
Martin Clarke,

6
Nel caso in cui qualcuno sta cercando come fare questo in EfCore e finito qui, come me, il comando è: dotnet ef migrations script. Altre informazioni sulla documentazione: docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/…
Rafael Miceli

14

Per chiunque utilizzi il core framework di entità che finisce qui. Questo è come lo fai.

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

È possibile utilizzare il parametro -Frome -Toper generare uno script di aggiornamento per aggiornare un database a una versione specifica.

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generate-sql-scripts

Esistono diverse opzioni per questo comando.

La migrazione da dovrebbe essere l'ultima migrazione applicata al database prima di eseguire lo script. Se non sono state applicate migrazioni, specificare 0(questo è il valore predefinito).

L' ad di migrazione è l'ultimo di migrazione che verrà applicato al database dopo l'esecuzione dello script. L'impostazione predefinita è l'ultima migrazione nel progetto.

Un idempotente possibile generare facoltativamente uno script . Questo script applica le migrazioni solo se non sono già state applicate al database. Ciò è utile se non si conosce esattamente quale sia stata l'ultima migrazione applicata al database o se si sta eseguendo la distribuzione su più database che possono trovarsi ciascuno in una migrazione diversa.


Questo funziona fino a un certo punto. Una volta che inizi a cambiare i nomi delle colonne inizierà a lanciare errori, la creazione di un DacPac è una soluzione migliore. Soprattutto quando inizi a usare Pipelines in CI / CD
Nick Turner il

8

Per aggiungere alla risposta di Matt Wilson ho avuto un sacco di classi di entità in codice prima ma nessun database dato che non avevo preso un backup. Quindi ho fatto quanto segue sul mio progetto Entity Framework:

Apri la console di Package Manager in Visual Studio e digita quanto segue:

Enable-Migrations

Add-Migration

Assegna alla tua migrazione un nome come "Iniziale", quindi crea la migrazione. Digita infine quanto segue:

Update-Database

Update-Database -Script -SourceMigration:0

Il comando finale creerà le tabelle del database dalle classi di entità (a condizione che le classi di entità siano ben formate).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.