2011-07-12 11 views
2

エンティティフレームワークを使用すると、どのデータベースに接続したいのかをスタックでかなり高く設定し、すべてのクエリでEFを使用することができますか?Entity Framework 4はマルチデータベースをサポートしていますか?

モデルごとに異なるデータベースがあり、すべてのモデルが同じデータベースに接続されているシナリオではありませんが、このデータベースはURLやサブドメインなどの条件によって異なります。 。

「はい」の場合、これはdbプーリングなどにどのような影響がありますか?

答えて

1

あなたのObjectContextを作成するとき、コンストラクタのパラメータは、接続文字列です:

http://msdn.microsoft.com/en-us/library/bb739017.aspx

プールには何の意味があってはなりません。

+0

がアクション火災の前にグローバルに設定されてObjectContextに何かあり、その後、閉じましたか?つまり、リクエストごとに1回これを行うことはできますか? – codecompleting

+0

まあ、オブジェクトコンテキストはスレッド間で共有されるべきではなく、一般的に(作業単位あたりの)寿命が短くなければなりません。そう、はい、接続文字列です。ObjectContextの作成ごとに変更できるものです。 – Jeff

+0

それを作成し、それを破壊し、ページ要求の最初/最後は安全ですか?ベストプラクティス? (MVCのように、アクション実行前後) – codecompleting

1

はい、これを行うことができます。 ObjectContextを作成するときに適切な接続文字列を使用するだけで、使用するデータベースに接続できます。私たちはこれを頻繁に行います。

+0

しかし、私は正確に同じデータベース(-schema)ではなく、MS-SQLからOracleへの切り替えを想定していますか? –

+2

正しい。プロバイダは、アセンブリにコンパイルされたSSDLで指定されます。このスイッチを実行する場合は、edmxのコンパイルアクションを変更して出力フォルダにコピーし、実行時に別のプロバイダを使用するようにssdlを手動で切り替えることができます。詳細はこちらhttp://mosesofegypt.net/post/Multiple-database-support-with-Entity-Framework.aspx – Jeff

1

DbContextを使用するたびに、クエリを実行する前にconnectionStringを変更するだけで済みます。

たとえば、あなたは、単に初期カタログ名に変更することができます

YourDbContext.Database.Connection.ConnectionString = "data source=LAPKEVIN\\SQLKEVIN;Integrated Security=SSPI;Initial Catalog=YourDatabase"; 
関連する問題