Ho un'applicazione che utilizza Entity Framework 6 (database-first). Il mio database esiste già, ma vorrei essere in grado di eseguire la mia applicazione in un nuovo ambiente e fare in modo che il codice crei il database e le tabelle se non esistono già.
Come può essere realizzato in Entity Framework 6? Ho visto esempi precedenti che usano DbContext.CreateDatabase()
ma quel metodo non è disponibile in EF6. Per quello che vale, il database è in SQL Azure.
EDIT: alcuni hanno suggerito la strategia di inizializzazione CreateDatabaseIfNotExists, che è presumibilmente l'impostazione predefinita. Sfortunatamente, ricevo un errore quando tento di eseguire l'applicazione in un nuovo ambiente in cui il db non è stato ancora creato. Forse perché sto lavorando con Sql Azure? L'errore viene risolto se creo il db e le tabelle manualmente. Ecco il messaggio di errore:
Eccezione generata: "System.Data.SqlClient.SqlException" in System.Data.dll
Ulteriori informazioni: Impossibile aprire il database "MyExampleDatabase" richiesto dal login. L'accesso non è riuscito.
Accesso fallito per utente 'ExampleUser'.
Si noti che l'eccezione sembra essere un errore di autenticazione, ma non è questo il caso. Ho verificato che le credenziali e la stringa di connessione siano valide. L'applicazione funziona correttamente ed è in grado di apportare aggiornamenti al db dopo aver creato manualmente i db e le tabelle. Ma mi piacerebbe che l'applicazione fosse in grado di creare automaticamente il db e le tabelle in fase di esecuzione se non esistono già.
Grazie per il feedback. Sono stato in grado di risolvere il problema ricreando il mio modello di entità ADO.NET utilizzando l'opzione "Code First from database" (in Visual Studio 2015). In precedenza, ho utilizzato l'opzione "EF designer dal database". Apparentemente, avevo bisogno di optare per "code-first" per sfruttare questa funzionalità di EF.
Il modo migliore per assicurarti di ottenere ciò che desideri è di svezzare la creazione dall'inizializzazione.
Per la creazione del database, utilizzerei l'API di Azure REST o (se possibile) il pacchetto Microsoft.Azure.Management.Sql NuGet. La creazione di un database utilizzando questa API consente di specificare il livello di prestazioni desiderato, che determina il prezzo.
Per l'inizializzazione puoi usare EF come faresti normalmente