2012-05-09 8 views
10

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

答えて

4

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

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

それは重要ではありませんので、私は、実際の接続文字列を省略 - ちょうどあなたのweb.configファイルで検索するかのアイデアを与えることを望んでいました。

プログラム文字列で接続文字列を変更することもできます。 Example 16.2. Programmatically modifying an EntityConnectionStringをチェックしてください。

+0

私はweb.configファイル内の接続文字列を設定する方法を知って、私が知りたいことは、実行時にそれを変更する方法です、これは、使用するデータベースを選択できるようにするためです。私はedmxファイルを作成するときにすでに接続文字列が設定されていますが、実行時にそれを変更する方法はありますか? – James

+0

OK - 私は自分の答えを編集し、あなたにそれを行う方法を正確に示すリンクを与えました。 –

+0

この質問と回答は、すべてのことを便利な要約で表しています。http://stackoverflow.com/questions/14440698/setup-entity-framework-for-dynamic-connection-string –

22

私たちはweb.configsに接続文字列を格納しないので、受け入れられた解決法は私たちのためには機能しません。

データベースファーストとモデルファーストの開発用にT4テンプレートを使用して生成されたコードは、コードで使用されていると正しく動作しないことがあります最初のモード。データベースファーストまたはモデルを継続的に使用するにはまず、実行中のアプリケーションの構成ファイルでEntity Framework接続文字列が指定されていることを確認します。データベースファーストまたはモデルファーストから生成されたこれらのクラスをコードで使用するにはまず、属性またはDbModelBuilder APIを使用して追加の構成を追加し、この例外をスローするコードを削除します。

お使いのモデル名がMyModel.edmxある例えば(あるMyContextがあなたの コンテキストモデル名です(これを解決する、次のようにあなたのコンテキストの部分クラスを作成し、追加のEFメタデータを使用して接続文字列をフォーマットする

、より以下のコードでMyContext)は、3つのすべての拡張機能を使用.csdl、.ssdl、.mslでMyModelに置き換えられます):

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)) 
    { 
    } 
} 
+1

私のためにこの作品を作るために、私は"をこの回答に記載されているように一重引用符に変更する必要がありました:http://stackoverflow.com/a/7004173/994464 – Brenton

+0

簡単で簡単です。 –

1

あなたは、web.configファイル内の複数の接続文字列を定義し、おそらくあなたのコードでそれらを使用することができますあなたの仕事。例えば :

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

OK: `

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

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

ので、あなたのコンテキストクラスのコンストラクタは、パラメータとして接続文字列の名前を取得します。今、あなたが以下のようにコード内で使用することができます。

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

、その後

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