多数の接続文字列を含むソリューションを開こうとすると、Visual Studio 2015はプロジェクトの読み込み時にそれぞれに接続しようとします。Visual Studio 2015をプロジェクトロード時のすべての接続文字列に接続するのを止めるにはどうすればよいですか?
チームの各開発者は、開発中にSQL Serverのローカルインスタンスを使用します。このインスタンスには、主なデータベースの複数のコピーを複数のレベルの移行を含むことができます。私たちは小規模なチームであり、多くの場合、タスクを途中まで切り替えることになります。このために、我々はマシン固有で接続文字列の数を持っている、と私たちのDbContextを作成するときに、我々は、接続文字列を使用するかを決定するためにマシン名を使用できるようにするには
:
<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>
私たちのコンテキストがありますそして、そのように初期化:
public class TTDataContext : DbContext
{
public const string CacheKey = "dbContext";
public TTDataContext()
: base(SqlConnections.GetConnectionStringName())
{
}
...
}
そして支援するために、これを使用しています。
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;
}
}
Visual Studio 2015がプロジェクトをロードするとき(初期またはGitブランチの変更時)、リストに指定されたすべての単一の接続文字列への接続を確立しようとします。各関連マシンには、このエラー投げ、接続がタイムアウトするまで応答を停止:
のVisual Studio 2013がこのセットアップで何の問題もなかったです。 Visual Studio 2015が同じように動作するように説得する方法はありますか?
Visual Studio 2015がこのような愚かなことをするとは信じがたいです。非常に悪いデザイン。これは、将来のバージョンでの修正と同様に、VSチームに送信する必要があります。 – Hopeless
奇妙な動作。しかしそれを再現できませんでした。あなたの接続文字列の1つをコピーしましたが、プロジェクトを再オープンしたときに接続しようとしなかったり、タイムアウトしたりしませんでした。サーバーエクスプローラで手動で[更新]をクリックしたときにのみ発生しました。たぶんオートリフレッシュを強制する外部プラグインがありますか? –
ありがとう@VolkanPaksoy - ブランチを変更してVSがプロジェクトをリロードするときに、より一般的に見えます。ちょうどサーバエクスプローラのウィンドウが閉じて再起動する前に再起動して、それが起こると、サーバーエクスプローラは各コネクションの横に赤い 'X'を表示しているので、接続しようとしています。私は次にすべてのプラグインを無効にして、それが何か変わったかどうかを調べるつもりです... –