実行時に読み込まれるapp.config/web.configは、アプリケーションエントリポイントに関連付けられているconfigのみです。したがって、Webプロジェクトと、データアクセスレイヤーで動作する参照プロジェクトがあり、設定から接続文字列を読み込みたい場合は、Webプロジェクトのweb.configが使用されます。 Windowsアプリケーションやwpfなどでも同じことが言えます。アプリケーションのメインエントリポイントの設定だけが使用されます。アプリケーションが実行されると、コード内のどこからでもapp.config/web.configを参照することができますが、通常は文字列識別子を使用してこれを行います。言い換えれば
あなたはMyDA.dll
にコンパイルあなたのデータアクセスでプロジェクトを持っていて、MyDA.dll.config
に出力されることがあります、そのプロジェクト(これはデフォルトでは発生しません)あなたはMyDA.dll.config
に持っているものではapp.config場合は無視されます実行時にファイルは読み込まれず、または.exe
のエントリポイントのapp.config
のみが使用されます。 Entity FrameworkののDbContext
については
あなたはコンストラクタに直接、接続文字列の名前を渡すことができます。接続文字列を取得して渡す必要はありません。したがって、各接続にweb.configに固有の一意の名前を付けます。
あなたのコードでは、その名前を使用してEntity FrameworkのDbContextを作成することができます。私の過去に
var myEntities = new MyEntities("ConnectionName1"); // MyEntities is some class that derives from DbContext
は、私は通常、常に実行時に1つのデータベースにマップと連携DbContext
を投影します。私がここで言うことは、同じDbContext型を複数の異なるデータベースを指して使用することではないということです。この場合、その名前を私のDbContext
タイプにハードコードして、自分のアプリケーションがweb.configまたはapp.configにそれぞれリストされている接続名を持っていることを確認してください。あなたが本当に完全な接続要素をしたいです場合
public class MyEntities : DbContext {
public MyEntities() : base("ConnectionName1") {}
}
// calling code now never has to know about the connection
using(var myEntities = new MyEntities()) { /* do something here */}
別の方法としては、このようにそれを呼び出す(あなたは以下の呼び出しを作るプロジェクトでプロジェクトの参照に追加)System.Configuration
を参照することができます。
var connection = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionName1"];
var conString = connection.ConnectionString; // you can also get the provider
var myEntities = new MyEntities(conString);
私はこのアプローチをしばらく使用していませんが、あなたのケースでそれを使用するのは正当な理由があります。
は、あなたのメインプロジェクトであなたのweb.configファイルにデータプロジェクトにアプリ/ web.configファイルかられたconnectionStringを追加しようとしたことがありますか? – scheien
このブログを見ましたかhttps://msdn.microsoft.com/en-in/data/jj556606.aspx – Rahul
@scheienはい、私の文字列はメインプロジェクトのweb.configにしかありません。データプロジェクトのapp.configには何もありません。 – vaindil