6

Linq2Sql では、ソースにデータベース名を追加するだけで、データ コンテキストを複数のデータベースに接続できます

Linq 2 Entities / ADO.net Entity Framework でこれを達成する方法はありますか? データベース名をテーブル名に追加できますか?

「スキーマ」を dbo からMyDatabase.dboに変更しようとしましたが、EF はこれをカプセル化します

SELECT FROM [MyDatabase.dbo].[MyTable]

'Schema' を'MyDatabase].[dbo'に変更するようなトリッキーはエスケープされます

SELECT FROM [MyDatabase]].[dbo].[MyTable]

(2つに注意して]]ください。)

4

2 に答える 2

8

まず、これは公式にはサポートされていません

LINQ to SQL についてリンクしている答えは、DB サーバーの機能を使用して異種クエリを実行することです。また、どちらのフレームワークの機能でもなく、DB サーバーの機能であるため、それが Entity Framework でも機能しない理由もわかりません。つまり、LINQ to SQL は、1 つのデータベース サーバーのみが関与しているかのように接続を処理しています。ただし、すべての DB サーバーがこれを実行できるわけではないことに注意してください。

EDMX で何を変更するかについては、「SSDL コンテンツ」セクションで EntitySet ノードのスキーマ属性を探します。

この手法に関する 1 つの注意点は、データベースからモデルを更新すると、ストレージ モデルが消去され、最初から置き換えられることです。そのため、これらの変更を再適用する必要があります。LINQ to SQL ではデータベースからの自動更新がまったくサポートされていないため、これは LINQ to SQL では問題になりません。

より良い代替手段は、テーブルと他のデータベースを直接マッピングするのではなく、他のデータベースを参照するデータベースに VIEW を作成し、そのビューをマッピングすることです。

于 2009-03-04T13:10:15.440 に答える
1

データベースが SQL シノニムをサポートしている場合は、2 つのデータベース定義を 1 つのファイルにマージできます。私は最近それを行い、興味があればここにその方法を投稿しました。

基本的に、databaseB を指す databaseA にシノニムを作成し、データベースごとに個別の edmx ファイルを作成してから、スクリプトを実行して edmx ファイルを 1 つのファイルにマージし、シノニムが設定されているデータベースに接続します。

于 2011-05-23T18:36:41.210 に答える