2016-09-20 6 views
0

私はEntity Frameworkを使用してSQL Serverデータベースと対話するASP.NETコアアプリケーションに取り組んでいます。これまでのところ、Scaffold-DbContextコマンドを使用して、SQLサーバーデータベースから新しいモデルを作成していました。たとえ複数のテーブルに基づいてDbContextを作成したいとしても、私は上記のコマンドで-tフラグを使用してそれを行うことができます。すべてが単一のSQLデータベースで行われます。異なるデータベースから複数のテーブルに結合する

Scaffold-DbContext "Server=XXXXXXXXX;Database=XXXXXXXX;User Id=XXXXX;Password:XXXXXX" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -t Table1 Table2 

Scaffold-DbContext parametersコマンドから、別のデータベースを指定するオプションが見つかりませんでした。

新しいシナリオでは、異なるSQLデータベースから2つのテーブルを結合する必要があります。異なるデータベースの2つのテーブルで構成されるモデルを作成する方法はありますか?どちらのテーブルもそれらの間に1対1の関係を使用しています。

たとえば、DB1にはtable1があり、DB2にはtable2があります。これらの2つのテーブル(table1とtable2)で構成されるDbContextを作成する方法はありますか?

2つの異なるデータベースから2つのテーブルの間で結合を達成する他の方法はありますか?

+1

EFのどのバージョンでもデータベース間の結合はサポートされていません。ただし、各データベースを別々に照会して、linqでオブジェクトに結合することもできます。 – jrummell

答えて

1

いいえ、あなたはEntityFramework(6.xでもCoreでもない)で行うことはできません。 DbContextはデータベースごとであり、同じDbContext内でのみジョインできます。

ビューを作成し、必要なモデルにビューをマップすることができますが、iirc。ビューのマッピングは依然としてEntityFramework Coreのロードマップ上にあります。 EntityFramework 6.xで動作するかもしれません。

編集:

は、少なくともあなたがLINQの/流暢APIでそれをやってすることはできません。あなたはraw queriesを実行することができます。キャッチ:プロジェクトはモデルと正確に一致する必要があります。モデルのフィールドがないことはありません。非エンティティへのアドホックマッピングは、将来のバージョンのEntityFrameworkコアのロードマップに記載されています

+0

ありがとう@Tseng提案。生のクエリを使って試してみましょう。 – Sanket

+1

SQL Serverを使用している場合は、SQL Serverの「同義語」を試して、他のデータベースのテーブルの「同義語」を作成し、EFの観点からローカルテーブルとして扱うことができます。私は自分でそれを試していない。 – Ricky

関連する問題