2015-05-13 22 views
11

Ho creato un nuovo progetto libreria di classi (pacchetto) (prima di VS 2015 RC usato il nome anche peggio della libreria di classi asp.net per rappresentare il livello dei dati. Giusto per essere chiari questa è la struttura più recente stile kproj.Come abilitare le migrazioni (EF6) in un progetto asp.net 5?

Aggiunto EF 6.1.3 per project.json. Attualmente solo il targeting DNX451.

"dependencies": { 
     "EntityFramework": "6.1.3" 
     ,"Moq": "4.2.1502.911" 
    }, 

creati classi del modello iniziale e utilizzando un database di AlwaysCreate inizializzatore tutto funziona bene. Ora ha bisogno di passare a migrazioni in modo utilizzati Enable-migrazioni nella console del gestore pacchetti e ottenuto:

Enable-Migrations : The term 'Enable-Migrations' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. 
At line:1 char:1 
+ Enable-Migrations 
+ ~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (Enable-Migrations:String) [], CommandNotFoundException 
    + FullyQualifiedErrorId : CommandNotFoundException 

Per le migrazioni EF7 il gestore pacchetti non è supportato per i comandi di migrazione. Invece c'è un nuovo comando ef eseguito attraverso dnu ma quel nuovo processo è solo per EF7 non EF6 giusto?

Perché il gestore pacchetti ritiene che Enable-Migrations non sia valido anche se EF6 è stato referenziato?

risposta

3

Perché il gestore pacchetti ritiene che Enable-Migrations non sia valido anche se è stato fatto riferimento a EF6?

Perché io assumo e sono abbastanza sicuro che ASP.NET 5 progetti non invocano installare e disinstallare script PowerShell all'interno dei pacchetti che EF 6 pacchetto deve aggiungere comandi di migrazione per confezionare console manager. La tua migliore fortuna è cercare di integrare lo strumento da riga di comando (credo sia chiamato migrate.exe, non sicuro) all'interno del pacchetto Nu6 di EF6.

+0

La migliore risposta finora. Sembra che tu abbia ragione. È possibile che quegli script ps siano incompatibili in quanto il pacchetto, la configurazione e la struttura della cartella vengono cambiati. Migrate.exe è un vicolo cieco. Sembra che venga utilizzato solo per apportare modifiche al database dalla migrazione. Enable-Migration e Add-Migration sono puramente in PowerShell. Onestamente tutto ciò di cui ho bisogno è una utility standalone, ma per quello che sto facendo ora l'inizializzatore "DropCreateDatabaseAlways" funziona bene. –

+2

C'è anche un problema con i comandi e VS2015 RC in generale: https://github.com/aspnet/EntityFramework/issues/1950. Se dividi il tuo EF6 in un assembly separato e usi il vecchio stile csproj, dovresti poterlo fare riferimento nell'app DNX451 e far funzionare i comandi (supponendo che tu stia utilizzando la soluzione alternativa nel collegamento) – NPNelson

-4

Nel progetto asp.net 5 è necessario utilizzare l'entità framework 7 e utilizzare il comando di migrazione ef dalla riga di comando.

Ho appena fatto un riassunto qui How can I manage EF 6 migrations in visual studio 2015?

+0

La tua risposta è lì bene come qui non è corretto. Asp.Net 5 supporta EF6. Ce l'ho proprio adesso. Il problema è limitato al solo supporto delle migrazioni che non è attualmente supportato tramite il gestore pacchetti (PowerShell). –

+0

Ho risposto nell'altra domanda: ho visto numerosi report di incompatibilità con l'identità e il meccanismo che fa parte di asp.net 5. Penso che tu possa usarlo a tuo rischio, –

+0

Beh, l'intero stack è pre-release in modo che è tutto a proprio rischio. Penso che parte della confusione sia che asp.net 5! = Core clr 5.0. ASP.NET 5 può essere eseguito utilizzando EITHER core clr 5.0 o il framework completo 4.5.1. Ovviamente Microsoft è orribile nel nominare le cose, quindi diventa confuso, ma core clr 5 NON supporta EF6. Manca alcuni dei gruppi di sistema richiesti che EF6 utilizza. 4.5.1 supporta EF6. ASP.NET 5 può essere eseguito su entrambi. Quindi è possibile avere EF6 e ASP.NET 5 nello stesso progetto, purché si rivolga solo a clr 4.5.1. non core clr 5.0. –

2

sono riuscito a aggirare questo creando un vecchio progetto .csproj cui il comando opere Enable-migrazioni. L'unica differenza è che invece di avere una copia separata dei file, li ho aggiunti tutti per riferimento, usando l'opzione "Aggiungi per collegamento" quando si aggiunge un file esistente.

Ora è possibile aggiungere migrazioni, ecc. E modificare i file in base alle esigenze, e queste modifiche si rifletteranno automaticamente nel mio .xproj poiché sono gli stessi file.

4

MODIFICA per 1.0.0:Migrator.EF6 ora supporta 1.0.0.


EDIT per RC2:Migrator.EF6 ora supporta RC2.


Quello di cui abbiamo bisogno è uno strumento da riga di comando di dnx che avvolge EF6 e delega i comandi ad esso. Questo perché i progetti DNX non vedranno init.ps1 e install.ps1 necessari per far funzionare Add-Migration (almeno per ora, vedere this).

L'implementazione non è difficile ma nessuno sembra averle dato il tempo, quindi ho finito per farne uno.

Questa soluzione non richiede un separato .csproj, lo stesso flusso di lavoro avviene ma invece di Update-Database si eseguirà dnx ef database update e comandi simili.

Istruzioni e campioni possono essere trovati here: Migrator.EF6.

In seguito, probabilmente in RTM, sarete in grado di utilizzarli anche nei progetti DNX. E questo è probabilmente il motivo per cui Microsoft non ne ha fatto uno per supportare le migrazioni EF6.

+0

Avete un equivalente a Add-Migration InitialCreate -IgnoreChanges? Ho bisogno di uno vuoto –

+1

@MihaiBratulescu usa la nuova v1.2.0, puoi fare 'migrazioni dnx ef aggiungere InitialCreate --ignore-changes'. – mrahhal

+0

bene che è stato veloce grazie –

Problemi correlati