32

DbContext から派生させ、パラメーターなしのコンストラクターを使用すると、web.config から接続文字列が読み込まれます。他の DbContext コンストラクターのいずれかを使用して、connectionString を明示的に指定するオプションもあります。

サーバー/ユーザー名とパスワードの場所は実行時に決定されるため、私の特定の状況では、接続文字列を web.config で指定することはできません。簡単に修正できますか?上記のコンストラクターを使用して接続文字列を指定するだけですか? 違う。

問題は、上記のコンストラクターを使用して接続文字列を指定すると、デフォルトのプロバイダーを使用しようとするため、私のように 1 つ以上の非標準プロバイダーを使用している場合、機能しないことです。

web.config で既定のプロバイダーを変更できると確信していますが、複数のプロバイダーを使用したいので変更できません。

これを回避する唯一の方法は、DbContext の代わりに ObjectContext を使用することです。これにより、データベース接続文字列と共にプロバイダーを指定できるようです。

それを行う他の方法はありますか?私の回避策はかなり合理的ですか?

ObjectContext インスタンスから DbContext を作成することもできると思います。

4

3 に答える 3

37

手動で作成し、次のようにコンストラクターDbConnectionに渡します。DbContext

var conn = DbProviderFactories.GetFactory("MY_CONN_PROVIDER").CreateConnection();
conn.ConnectionString = "MY_CONN_STR";

new DbContext(conn, true);

2 番目のパラメーターbool contextOwnsConnectionが であることに注意してくださいtrue。接続を他の場所で再利用しないため、Dispose()必要に応じてコンテキストで接続を管理できます。

于 2013-07-01T11:31:42.923 に答える