私はいくつかのデータベースを持っています、それらのスキーマは同じです。database-firstを使用する場合、edmxファイルを作成するときに接続文字列が指定されます。知りたいのですが、接続文字列を変更する方法はありますか?これは、操作するデータベースを選択できるようにするためです。
3 に答える
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="SandBoxEntities" connectionString="metadata=r... />
</connectionStrings>
実際の接続文字列は重要ではないため、省略しました。web.configファイルで何を探すべきかを示したいだけです。
プログラムで接続文字列を変更することもできます。例16.2を確認してください。プログラムでEntityConnectionStringを変更します。
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
}