私はいくつかのデータベースを持っています、それらのスキーマは同じです。データベースファーストを使用する場合、edmxファイルを作成するときに接続文字列が指定されます。知りたいのですが、接続文字列を変更する方法はありますか?これは、操作するデータベースを選択できるようにするためです。事前にThx!
Web.configファイルの接続文字列を変更します。
<connectionStrings>
<add name="SandBoxEntities" connectionString="metadata=r... />
</connectionStrings>
重要ではないため、実際の接続文字列を省略しました。web.configファイルで何を探すべきかを説明したかっただけです。
プログラムで接続文字列を変更することもできます。チェックアウト 例16.2。EntityConnectionStringをプログラムで変更する 。
Web.configsに接続文字列を保存しないため、受け入れられたソリューションは機能しません。ベースのDbContextコンストラクターを介して接続文字列を提供しようとすると、次の例外が発生します。
データベースファーストおよびモデルファースト開発用のT4テンプレートを使用して生成されたコードは、コードファーストモードで使用すると正しく機能しない場合があります。 DatabaseFirstまたはModelFirstを引き続き使用するには、実行中のアプリケーションの構成ファイルでEntityFramework接続文字列が指定されていることを確認してください。データベースファーストまたはモデルファーストから生成されたこれらのクラスをコードファーストで使用するには、属性またはDbModelBuilder APIを使用して構成を追加し、この例外をスローするコードを削除します。
これを解決するには、次のようにコンテキストの部分クラスを作成し、接続文字列を追加のEFメタデータでフォーマットします(MyContextは 環境 モデル名(たとえば、モデル名がMyModel.edmxの場合、以下のコードのMyContext
はMyModel
に置き換えられ、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))
{
}
}
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
}