2015-09-23 9 views
7

Quando si tenta di aprire una soluzione che contiene un numero elevato di stringhe di connessione, Visual Studio 2015 tenta di connettersi a ciascuna di esse durante il caricamento del progetto.Come posso impedire a Visual Studio 2015 di connettersi a ogni stringa di connessione durante il caricamento del progetto?

Ogni sviluppatore del nostro team utilizza un'istanza locale di SQL Server durante lo sviluppo. Questa istanza può avere più copie del nostro database principale che includono diversi livelli di migrazione: siamo una piccola squadra, quindi spesso finiscono per passare le attività a metà.

Per consentire a questo, abbiamo un numero di stringhe di connessione che sono specifiche della macchina, e quando si crea il nostro DbContext usiamo il nome del computer per determinare quale stringa di connessione da utilizzare:

<connectionStrings> 
    <!-- Steve --> 
    <add name="MachineConnection_LT4" providerName="System.Data.SqlClient" 
     connectionString="Data Source=LT4\SQL2012;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx;MultipleActiveResultSets=True" /> 

    <!-- Sean --> 
    <add name="MachineConnection_DESKTOP-UQV58RL" providerName="System.Data.SqlClient" 
     connectionString="Data Source=DESKTOP-UQV58RL\SQLEXPRESS;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx;MultipleActiveResultSets=True" /> 

    <!-- Sarah --> 
    <add name="MachineConnection_Dev-3" providerName="System.Data.SqlClient" 
     connectionString="Data Source=Dev-3\;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx;MultipleActiveResultSets=True" /> 

    <!-- Graham --> 
    <add name="MachineConnection_lt5" providerName="System.Data.SqlClient" 
     connectionString="Data Source=.;Initial Catalog=xxx;Integrated Security=True;MultipleActiveResultSets=True" /> 
    <add name="MachineConnection_graham-surface3" providerName="System.Data.SqlClient" 
     connectionString="Data Source=.;Initial Catalog=xxx;Integrated Security=True;MultipleActiveResultSets=True" /> 
    <add name="MachineConnection_graham-pc-10" providerName="System.Data.SqlClient" 
     connectionString="Data Source=.;Initial Catalog=xxx;Integrated Security=True;MultipleActiveResultSets=True" /> 

    <!-- Alex --> 
    <add name="MachineConnection_Dev9" providerName="System.Data.SqlClient" 
     connectionString="Data Source=Dev9;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx;MultipleActiveResultSets=True" /> 

    <!-- Reuben --> 
    <add name="MachineConnection_ReubenPC" providerName="System.Data.SqlClient" 
     connectionString="Data Source=REUBENPC\SQLEXPRESS;Initial Catalog=xxx;Integrated Security=True;MultipleActiveResultSets=True" /> 

</connectionStrings> 

Il nostro contesto è poi inizializzato in questo modo:

public class TTDataContext : DbContext 
{ 
    public const string CacheKey = "dbContext"; 

    public TTDataContext() 
     : base(SqlConnections.GetConnectionStringName()) 
    { 
    } 

    ... 

} 

E usa questo per aiutare:

public class SqlConnections 
{ 
    private const string DefaultConnectionStringName = "DefaultConnection"; 

    /// <summary> 
    /// Get the name of the connection string to use. 
    /// This attempts to find a machine-specific connection string e.g. MachineConnection_LT4, and falls back to 
    /// the default connection string if a machine-specific connection string is not found 
    /// </summary> 
    /// <returns></returns> 
    public static string GetConnectionStringName() 
    { 
     // This enables a connection string to be completely overridden in the cloud service configuration 
     try 
     { 
      var cloudConnectionString = CloudConfigurationManager.GetSetting("TTDatabaseConnectionString"); 
      if (!String.IsNullOrEmpty(cloudConnectionString)) return cloudConnectionString; 
     } 
     catch 
     { 
      // Deliberately empty - an exception will be thrown if not running on AppFabric 
     } 

     string machineSpecificConnectionStringName = string.Format("MachineConnection_{0}", Environment.MachineName); 
     string connectionString = ConfigurationManager.ConnectionStrings[machineSpecificConnectionStringName] == null 
        ? DefaultConnectionStringName 
        : machineSpecificConnectionStringName; 
     return connectionString; 
    } 
} 

Quando Visual Studio 2015 carica il progetto (inizial- mente o modificando il ramo Git), tenta di stabilire connessioni a ogni singola stringa di connessione specificata nell'elenco (confermata rimuovendo tutte tranne una di esse) e poiché sono tutte locali per ogni macchina in questione non risponde più finché la connessione è fuori, gettando questo errore:

SQL Connection Error

Visual Studio 2013 non aveva alcun problema con questo set-up. C'è un modo per convincere Visual Studio 2015 a comportarsi allo stesso modo?

+0

è difficile credere che Visual Studio 2015 faccia una cosa così stupida. Design molto cattivo. Questo dovrebbe essere inviato al team VS per una spiegazione e una correzione nelle versioni future. – Hopeless

+1

Comportamento strano. Non potrei riprodurlo comunque. Ho copiato una delle tue stringhe di connessione ma non ho provato a connettermi e timeout quando ho riaperto il progetto. È successo solo quando ho fatto clic manualmente su Aggiorna in Esplora server. Forse c'è qualche plugin esterno che impone un auto-refresh? –

+0

Grazie a @VolkanPaksoy - sembra essere più diffuso quando si cambia ramo e VS ricarica i progetti. Ho appena provato a verificare che la finestra Esplora server sia stata chiusa e riavviata prima di caricarla di nuovo e continua a succedere: in seguito Explorer Server mostra ogni connessione con una "X" rossa accanto, in modo che si stia tentando di connettersi e realizzando che la connessione non è disponibile. Ho intenzione di provare a disattivare tutti i plugin e vedere se questo cambia qualcosa ... –

risposta

5

Questo è stato causato da un'estensione, in particolare Karma Test Adapter (versione 1.1.3) che sembra eseguire automaticamente del codice sul carico del progetto.

La disattivazione di questa estensione ha risolto il problema.

Problemi correlati