1

データを取得するために、2 つの異なるデータベースからデータを取得しようとしています。、 でも; このエラーが発生します。

**The query contains references to items defined on a different data context**

    db = context1
    db2 = context2

    var query = from m in db.Merch
                join d in db.Dept on m.merchDept equals d.deptID.ToString()
                join p in db2.PROD_SKU on m.pID equals p.pID
                join f in db.FOB on d.fobCode equals f.fobID
                join w in db.Item on m.merchID equals w.merchID
                join i in db.Doc on m.merchID equals i.MerchID
                            where p.UPC_NBR.ToString() == upc

これら 2 つのコンテキストを使用して、linq を使用してこのレコードを取得するにはどうすればよいでしょうか。どんな助けでも大歓迎です。

4

3 に答える 3

3

Linq2Sql は、複数のデータベース コンテキストでのクエリをサポートしていません。ただし、例は非常に単純に見えます.upcでp.pIDを見つけ、その値を2番目のクエリの引数として使用します. 次のようになります。

db = context1
db2 = context2

var upcId = (from p in db2.PROD_SKU 
            where p.UPC_NBR.ToString() == upc
            select p.pID).Single();

var query = from m in db.Merch
            join d in db.Dept on m.merchDept equals d.deptID.ToString()         
            join f in db.FOB on d.fobCode equals f.fobID
            join w in db.Item on m.merchID equals w.merchID
            join i in db.Doc on m.merchID equals i.MerchID
                        where m.pID == upcId;
于 2013-07-19T19:37:43.217 に答える
1

簡単に言えば、できないということです... 簡単ではありません。クロスデータベース結合を行うには、両方のデータベースを参照する 1 つのデータ コンテキストを使用する必要があります。

  <Table Name="db.dbo.Merch" Member="Merch">
    ...
  </Table>
  <Table Name="db2.dbo.PROD_SKU" Member="PROD_SKU">
    ...
  </Table>

DBML で、テーブルの名前を上記のように手動で変更します。また、両方のデータベースへのクエリを許可する権限を設定したことを確認する必要があります。

于 2013-07-19T19:35:53.473 に答える