15

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

4

3 に答える 3

33

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))
    {
    }
}
于 2014-05-07T21:01:38.907 に答える
3

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

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

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

プログラムで接続文字列を変更することもできます。例16.2を確認してください。プログラムでEntityConnectionStringを変更します。

于 2012-05-09T02:52:58.897 に答える
1

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
}
于 2016-12-19T09:45:07.850 に答える