web-dev-qa-db-ja.com

最初にデータベースの接続文字列を変更する方法はありますか?

私はいくつかのデータベースを持っています、それらのスキーマは同じです。データベースファーストを使用する場合、edmxファイルを作成するときに接続文字列が指定されます。知りたいのですが、接続文字列を変更する方法はありますか?これは、操作するデータベースを選択できるようにするためです。事前にThx!

15
James

Web.configファイルの接続文字列を変更します。

  <connectionStrings>
    <add name="SandBoxEntities" connectionString="metadata=r... />
  </connectionStrings>

重要ではないため、実際の接続文字列を省略しました。web.configファイルで何を探すべきかを説明したかっただけです。

プログラムで接続文字列を変更することもできます。チェックアウト 例16.2。EntityConnectionStringをプログラムで変更する

3
Jon Crowell

Web.configsに接続文字列を保存しないため、受け入れられたソリューションは機能しません。ベースのDbContextコンストラクターを介して接続文字列を提供しようとすると、次の例外が発生します。

データベースファーストおよびモデルファースト開発用のT4テンプレートを使用して生成されたコードは、コードファーストモードで使用すると正しく機能しない場合があります。 DatabaseFirstまたはModelFirstを引き続き使用するには、実行中のアプリケーションの構成ファイルでEntityFramework接続文字列が指定されていることを確認してください。データベースファーストまたはモデルファーストから生成されたこれらのクラスをコードファーストで使用するには、属性またはDbModelBuilder APIを使用して構成を追加し、この例外をスローするコードを削除します。

これを解決するには、次のようにコンテキストの部分クラスを作成し、接続文字列を追加のEFメタデータでフォーマットします(MyContextは 環境 モデル名(たとえば、モデル名がMyModel.edmxの場合、以下のコードのMyContextMyModelに置き換えられ、3つの拡張子すべて.csdl、.ssdl、.mslが使用されます)):

public partial class MyContext
{
    public MyContext(string connStr)
        : base(string.Format(@"metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string='{0}'", connStr))
    {
    }
}
29
rjchicago

Web.configで複数の接続文字列を定義してから、コードでそれらを使用することができます。例: `

<connectionStrings>
  <add name="conStr1" connectionString="metadata=r... />
</connectionStrings>`

<connectionStrings>
  <add name="conStr2" connectionString="metadata=r... />
</connectionStrings>`

等々

コンテキストクラスコンストラクターは、パラメーターとして接続文字列名を取得します。

 public MyContext(string connStr)
    :  base(connStr)    {    }

OK。これで、次のようにコードで使用できます。

using (var db = new MyContext("name=conStr1"))
{
  //your code here
}

その後

using (var db = new MyContext("name=conStr2"))
{
   //your code here
}
1
hojjat.mi