2011-01-16 7 views
5

Quando si esegue l'applicazione con la seguente stringa di connessione, il file di database viene creato correttamente.Impossibile ricreare il database di SQL Server Express con Entity Framework Code First e MVC 3 senza modificare il nome del database

<add name="ConnString1" 
    connectionString="Data Source=.\SQLEXPRESS; 
         Database=Database1; 
         Integrated Security=SSPI; 
         AttachDBFilename=|DataDirectory|aspnetdb.mdf; 
         User Instance=true" 
    providerName="System.Data.SqlClient" /> 

Se elimino il file di database e si tenta di eseguire l'applicazione nuovamente il file di database non riesce a essere creato e ottengo le seguenti eccezioni interne:

Il provider sottostante fallito su Apri.
{ "Impossibile aprire il database \" Database1 \ "richiesto dall'account di accesso. L'accesso non è riuscito. \ Database1 \ nLogin riuscito per l'utente 'del computer \\ someuser'."}

Se cambio Database = Database1 a Database = Database2 nella stringa di connessione, quindi il file di database viene creato correttamente. Il problema si ripete sempre.

Come posso ricreare il file di database senza dover modificare il nome del database?

+0

Hai provato a utilizzare un nome file diverso da aspnetdb.mdf? Quali azioni intraprendi per eliminare un database esistente? –

+0

Quando cambio il nome del file di database diventa più bizzarro. Se cambio il nome da aspnetdb.mdf a aspnet2.mdf ottengo l'errore "Il percorso del database" \ aspnetdb.mdf esiste già Scegliere un nome di database diverso Non è possibile allegare il percorso del file \ aspnet2.mdf come database DatabaseName. " dove percorso è il percorso e DatabaseName è il nome del database. Sto eliminando i file del database facendo clic con il pulsante destro del mouse su Visual Studio ed eliminandoli. – adolfojp

+0

hai trovato una soluzione per questo? Sto riscontrando un problema simile. la fase di creazione del database in xUnit. La prima volta che funziona correttamente, la seconda volta non riesce con "Impossibile aprire il database" [nome del mio database] "richiesto dal login. ] '. 'Se ricostruisco il progetto, funziona di nuovo in xUnit, ma se provo a eseguire il test senza ricostruire, restituisce l'errore di cui sopra. –

risposta

1

Verificare che i diritti di directory consentano di eliminare il file mdf e che l'account di accesso abbia i privilegi di schema/tabella di eliminazione dei diritti di directory sono un problema comune con i file mdf a causa dell'alta sicurezza posta su questi file a causa della loro potenziale nature

0

Posso vedere che questo è un post più vecchio - si spera che questo possa aiutare qualcuno nella stessa situazione.

Prima di utilizzare il codice, la prima volta che viene eseguita l'applicazione crea il db senza problemi: sa che non esiste perché non lo ha precedentemente creato. Il codice innanzitutto accetta anche un valore hash dei modelli utilizzati e memorizza quello nel nuovo database: controlla la tabella denominata EdmMetadata, ovvero il punto in cui è memorizzato il valore hash. Usa il valore hash per verificare successivamente se il modello è cambiato da build a build, quindi sa se rilasciare il database e ricostruire.

La seconda volta dopo aver eliminato il database, cerca il database mancante per confrontare il valore hash del modello e non riesce a trovarlo perché il database è ora mancante.

La mia soluzione alternativa consiste nell'aggiungere un campo senza significato (ricordandosi di eliminarlo dopo lo sviluppo) in uno dei modelli per forzare la ricostruzione, senza eliminare il database. In alternativa, è possibile modificare il valore hash db per forzare la ricostruzione.

Questo funziona con i primi database delle applicazioni del codice, non così sicuri con il database di appartenenza.

Problemi correlati