2012-03-22 32 views
3

4つの異なるテーブルを照会するLINQ to SQL DataContextがあります。しかし、これらのテーブルの1つを別のデータベースに移動する必要があります。特定のテーブルと別のテーブルのデータベースと接続文字列を持つことは可能ですか?だから、今、それはすべての4つのテーブルを扱うLINQからSQLへの複数のデータベース接続DataContext

[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="DATABASE1")] 
public partial class DataClassesDataContext : System.Data.Linq.DataContext 
{ 
    private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource(); 

    public DataClassesDataContext() : base(global::System.Configuration.ConfigurationManager.ConnectionStrings["DATABASE1ConnectionString"].ConnectionString, mappingSource) 
    { 
     OnCreated(); 
    } 

    public DataClassesDataContext(string connection) : base(connection, mappingSource) 
    { 
     OnCreated(); 
    } 
} 

だから今、私のようなものを持っています。私はそれが最初の3つのテーブルを扱い、最後にもう1つテーブルを持っていたいと思います。これは可能ですか?

ありがとうございます!

+0

テーブルに参加する必要がない場合は、各接続文字列が異なるデータベースを指す2つの異なるコンテキストを使用できます。 – adrianm

答えて

3

直接ではありません。最も明白なことは、データコンテキストを2つの別々のデータコンテキストクラス(および2つのdbml設定)に分割することです。

あなたが注意している場合は、「そのまま」、あなた残すことができる、とだけ明示的に各データコンテキストインスタンスへの接続文字列を指定し、ちょうどしかし、間違ったビットを使用していない:これはリスキーな。特に、そのまま残しておくと、異なるデータベースにあるテーブル間で結合しようとするクエリがまだ存在する可能性があります。これは機能しません。

ここでのデータコンテキストは、単一のデータベースでのみ動作するように設計されています。

1

Linq-to-SQLは、必要なすべてのデータが同じデータベースにある場合に最適です。クロスデータベースを実行している別のデータベースにテーブルを移動し始めると、結合が苦労する可能性があります。

http://www.enderminh.com/blog/archive/2009/04/25/2654.aspx

0

我々は(1つのデータベース内のすべてのテーブルを持っている開発用データベースにSQLコンテキストにLINQを作成することにより、同様の状況に取り組み、その後、テーブルを指すように本番データベースにシノニムを作成していますs)を他のデータベースに入れ、それだけですべて動作します。

、それがどのように動作するかの簡単な概要:

Devの環境:

use [Database2] 
go 

create table Table3 
{ 
    -- stuff goes here 
) 

use [Database1] 
go 

create table Table1 
{ 
    -- stuff goes here 
) 
go 

create table Table2 
(
    -- stuff goes here 
} 
go 

create synonym Table3 for Database2.dbo.Table3 

はもちろん、ご使用の環境に応じて、それはあなたの状況では動作しない場合があります

use [TheDatabase] 
go 

create table Table1 
{ 
    -- stuff goes here 
) 
go 

create table Table2 
(
    -- stuff goes here 
} 
go 

create table Table3 
{ 
    -- stuff goes here 
} 

本番環境ではなく、それは私たちのためにうまくいきました。

+0

ありがとう、それは私がやろうとしていることです。どのようにUSE [データベース]を行い、DataContextファイルで使用するConnectionStringを指定しますか? –

+0

私が投稿したコードは疑似SQLスクリプトです。 SQLでシノニムを作成する必要があります。あなたはあなたのアプリで "Database1"の接続文字列を使用するだけです。 – Jon

0

過去に同じ問題が発生しましたが、私がこれを克服する方法は、前述のようにテーブルを移動してから、テーブルを参照する元のデータベースにビューを作成することでした。

ビューが読み取り専用であるという欠点が1つあります。しかし、私はこのアプローチを推奨しませんが、私はデータベースごとに個別のdatacontextsをお勧めします。

関連する問題