2013-06-13 7 views
14

Sono nuovo di zecca per l'utilizzo di MVC e sto tentando di utilizzare un inizializzatore per inizializzare i dati nel mio DB quando l'applicazione viene avviata per la prima volta. Ecco quello che ho in Global.asax.cs:Impossibile rilasciare il database perché è attualmente in uso MVC

System.Data.Entity.Database.SetInitializer(new MyAppInitializer()); 
MyAppContext db = new MyAppContext(); 
db.Database.Initialize(true); 

Nel web.config, ecco la mia stringa di connessione:

<connectionStrings> 
    <add name="MyAppContext" 
    connectionString="data source= MyServer; Integrated Security=True; database=MyDatabase" 
    providerName="System.Data.SqlClient"/> 

Questo sta usando MS SQL 2008 R2 . Il mio Initializer assomiglia a questo:

public class MyAppInitializer : DropCreateDatabaseAlways<MyAppContext> 
{ 
    protected override void Seed(MyAppContext context) 
    { 
     var organizations = new List<Organizations> 
     { 
      new Organizations { OrgName = "AT", OrgPhone = 5093333433, OrgOfficeLocation = "ITB", OrgPointOfContact = "Tony", OrgIsActive = 1 }, 
      new Organizations { OrgName = "Libraries", OrgPhone = 5093331122, OrgOfficeLocation = "Holland-Terrell", OrgPointOfContact = "Herald", OrgIsActive = 1 } 
     }; 
     organizations.ForEach(s => context.Organizations.Add(s)); 
     context.SaveChanges(); 

ho fatto in modo ho chiuso la mia connessione al server e database in SQL Server Management Studio, ma più persone hanno accesso a questo database, anche se nessuno dovrebbe usare subito. Come posso ottenerlo così posso inizializzare questi dati nel mio DB? Grazie!

Modifica: ho già creato il DB sul server, ma è completamente vuoto (senza tabelle, procedure, ecc.). Ciò causerebbe un problema?

risposta

19

In SSMS eseguire qualcosa di simile ...

USE master -- be sure that you're not on MYDB 
ALTER DATABASE MYDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
DROP DATABASE MYDB; 
+0

Viene visualizzato un errore di sintassi: sintassi errata vicino a "IMMEDIATO" L'ho preso e l'ho eseguito, ma è stato eseguito per circa 5 minuti prima di interromperlo, nel qual caso ho ricevuto questo errore: La richiesta ROLLBACK TRANSACTION non ha corrispondenze INIZIA LA TRANSAZIONE. – SantasNotReal

+0

WITH ROLLBACK IMMEDIATE – Sam

+0

Works for *** LocalDB *** utilizzando _mdf file_? usando 'Data Source = (LocalDB) \ v11.0; AttachDbFilename = | DataDirectory | \ wingtiptoys.mdf; Sicurezza integrata = True' – Kiquenet

41

ho affrontato un problema simile oggi, quando si utilizza MVC codefirst. Dopo 20 minuti di provare varie cose ho notato che, la scheda "Server Explorer" in Visual Studio aveva una connessione aperta al mio database. Dopo aver "chiuso" la connessione nella scheda Esplora server di Visual Studio, il codice è stato in grado di eseguire e ricreare automaticamente il database.

+1

Divertente, Visual Studio (utilizzando VS 2015) connessione aperta e non può gestire questo caso da solo! –

+1

@TwoPea Ho avuto lo stesso problema con LocalDb che viene utilizzato in un progetto MVC di esempio. La tua soluzione l'ha risolto. – nam

+0

Questa è la soluzione effettiva e dovrebbe essere accettata come risposta, – Thinking

2

Nella finestra "Elimina" SSMS assicurarsi che "Chiudi connessioni esistenti" sia selezionato.

+0

Dopo aver provato tutti questi modi per far cadere il db, ho chiuso SSMS, chiuso le connessioni dati in VS e chiuso VS. Aperto VS, controllato per assicurarsi che le connessioni fossero ancora chiuse, ha eseguito l'applicazione. Ha funzionato. – JaneH

0

La chiusura di tutte le connessioni esistenti del database in Visual Studio Server Explorer e SQLManagement Studio ha risolto il problema per me.

+0

posso farlo *** a livello di codice *** _in Visual Studio Server explorer_? – Kiquenet

6

VS2015 close DB connection Come descritto da Vardhini ... chiudere la connessione DB in Esplora server.

+0

'ALTER DATABASE MYDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE' si applica a *** LocalDB ***? – Kiquenet

0

Le mie osservazioni sono:

  1. Non può essere registrato per applicazione
  2. non può essere collegato al db con Esplora server
  3. non può essere collegato con SSMS

Quindi l'applicazione ricostruzione DB anche quando Database.SetInitializer<DbContext>(new DbInitializer()); è in public DbContext(); - NON come altre risposte si trova per inserirlo in Application_Start();

+0

Dopo aver provato tutti questi modi per far cadere il db, ho chiuso SSMS, chiuso le connessioni dati in VS e chiuso VS. Aperto VS, controllato per assicurarsi che le connessioni fossero ancora chiuse, ha eseguito l'applicazione. Ha funzionato. – JaneH

Problemi correlati