Domanda

Ho creato un file modello di entità (.edmx) basato su un file .mdf nella mia applicazione ASP.NET, inserito nella mia App_Data Cartella.

Prima di tutto la mia stringa di connessione, creata dalla procedura guidata del framework entità:

<connectionStrings>
    <add name="Sales_DBEntities" 
        connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=.\SQLEXPRESS;attachdbfilename=&quot;c:\users\ext\documents\visual studio 2010\Projects\WebProject_A\WebProject_A\App_Data\Sales_DB.mdf&quot;;integrated security=True;USER INSTANCE=TRUE;multipleactiveresultsets=True;App=EntityFramework'" 
        providerName="System.Data.EntityClient" />
</connectionStrings>

Quanto sopra è posto in un file app.config File creato dalla procedura guidata.

Ho copiato la stessa stringa di connessione al web.config File anche (non sono sicuro che questo sia necessario).

Ho riscontrato due problemi quando ho tentato di eseguire successivamente la stessa applicazione su una mia macchina (ho creato l'applicazione su una macchina diversa).

Il primo riguardava l'istanza dell'utente:

Impossibile generare un'istanza utente di SQL Server a causa di un errore nell'avvio del processo per l'istanza dell'utente. La connessione sarà chiusa

La prima cosa che non capisco davvero è ciò che definisce effettivamente un'istanza dell'utente.

Secondo MSDN:

Un'istanza utente è un'istanza separata del motore di database SQL Server Express generato da un'istanza principale

Il mio database locale è considerato un'istanza utente?

Vorrei davvero qualche chiarimento sulla questione perché mi sono imbattuto in post suggerendo di contrassegnarlo come falso, e il motivo non mi era chiaro.

Un altro post su questo argomento

Da lì mi sono imbattuto in un'altra soluzione che spiega che per questo problema è necessario abilitare l'istanza dell'utente nel server SQL sulla macchina.

La correzione

Ho fatto ciò che è stato spiegato in quel post

Ma ora ho riscontrato un nuovo problema:

Un tentativo di allegare un database automatico per file (percorso completo al mio file app_data my.mdf) esiste un database con lo stesso nome o non è possibile aprire un file specificato o si trova su una condivisione UNC.

Ho già tentato di eliminare tutti i file sotto

 C:\Documents and Settings\(your user account name)\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

E riavvia come suggerito in altri post, ma ancora non riesco a trovare una soluzione chiara per questo problema.

So che questo è un post lungo ma qualsiasi aiuto sarebbe apprezzato

Grazie in anticipo.

È stato utile?

Soluzione

Leggi questo Ottima panoramica di quali sono veramente le istanze dell'utente.

In poche parole:

  • SQL Server ti consente di avere più istanze di per sé su un singolo computer - è possibile accedere all'istanza predefinita utilizzando solo il nome della macchina (o l'indirizzo IP) del computer host - tutte le altre istanze devono essere specificate da un Nome dell'istanza (come il SQLExpress sulla tua macchina)

  • Ai fini dello sviluppo, puoi anche creare un istanza dell'utente - Ogni utente ottiene la propria istanza separata di SQL Server (funziona in Edizione espressa solo) e un database è allegato dal suo nome file (path\Sales_DB.mdf) a quell'istanza dell'utente. Questa istanza viene avviata su richiesta, quindi corre e viene chiusa quando non è più necessario

Mentre questo funziona alla grande per lo sviluppo, non è davvero destinato a dopo, certamente non per uso di produzione.

In un ambiente di produzione, vuoi Allega i file di database Per l'istanza effettiva SQL Server, dovrebbero essere eseguiti, in genere utilizzando SQL Server Management Studio. Quando lo fai, non ti riferisci più a quel database tramite il suo nome del file, ma invece usi il nome del database Ciò è stato dato al database quando è stato allegato al server. In questo caso, SQL Server gestirà tutti i dettagli delle operazioni e che l'istanza SQL Server è sempre attiva e in esecuzione (non è necessario iniziare "su richiesta" tutto il tempo) e puoi usare cose come le autorizzazioni e Accedi per controllare l'accesso al database.

La tua stringa di connessione sembrerebbe quindi qualcosa del genere:

<connectionStrings>
    <add name="Sales_DBEntities" 
         connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='server=YourServerNameHere;database=Sales_DB;integrated security=True;App=EntityFramework'" 
        providerName="System.Data.EntityClient" />
</connectionStrings>

Quando è stato allegato un database a un'istanza SQL Server di produzione (o test), non è necessario sapere quali sono i file che compongono il database e non è necessario specificare tali file: SQL Server si occuperà Quello. Ti riferisci semplicemente al database tramite il suo nome del database.

Altri suggerimenti

La soluzione è sempre più semplice di quanto previsto:

  1. fare doppio clic su model.edmx File -> Il designer si aprirà.
  2. Fare clic con il tasto destro sul designer -> Update model from database .
  3. Nuova connessione -> Choose Database file (.mdf) sotto tipo.
  4. Sfoglia -> Vai al tuo App_Data cartella e scegli il db.
  5. Copia la stringa di connessione creata in App.config a web.config.

Ciao.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top