2012-01-24 3 views
2

私はこれを正しく語る方法さえもよく分かりませんが、ここにはあります。データベース接続とデータサービス参照からのADO.Netエンティティを組み合わせたLinqクエリ?

私は2つの.netウェブアプリケーションを持っています。 1つは、多数のエンティティセット(「DEPT_Entities」)へのアクセスを提供するWCFデータサービス(「DEPT_DataService」)を提供する。もう1つは、Webインターフェイスを提供するMVC2アプリケーションで、ローカルのMSSQLデータベースによってバックアップされる独自のADO.netエンティティもあります。説明するために過度に基本的な構造を使用して

のは、WCFデータサービスアプリケーションがローカルSQLデータベースに「部門」テーブルに裏打ちされた単一のエンティティセット、「部門」を、含まれて言ってみましょう。これには、その部門の主要連絡先の従業員IDとともに、会社内のすべての部門のリストが含まれています。

MVC2アプリケーションには、名前と従業員IDを含む多数の人物のリストを含む単一のエンティティセット「従業員」が含まれているとします。

私は、DEPT_EntitiesをMVC2アプリケーションにサービスリファレンス "DEPT"として追加しました。オブジェクトブラウザでそのサービス参照を見ると、 "DEPT_Entities"と "Departments"が表示されます。私が何をしたいか

はこのような何かを参照するために、LINQのを経由して、私を可能にする関係を定義している:

Employee firstEmployee = db.Employees.First(); 
Department[] firstEmployeesDepts = firstEmployee.Departments.toList(); 

...つまり、私は基本的にA提供してナビゲーションプロパティをしたいですローカルデータベースにあるEmployeeエンティティとリモートデータサービスで検出されたDepartmentエンティティの間に1対多の関係があります。

これは実行可能ですか?どうやって?

ありがとうございます!

答えて

1

あなたはWebサービスせずに直接データベースにアクセスする場合:

あなたはLinq2SQLは、リモート・テーブルを照会することができるようにするために、SQL Serverの技(リンクサーバーへのビューの内側のリモートクエリ)を使用することができます。基本的には、リモートテーブルは普通のローカルテーブル(ビューであるが、L2Sは気にしない)であることをシミュレートします。

これは動作しますが、それほど美しくはありません。

テーブルの前にWebサービスが必要な場合L2SがWebサービスを認識しないため、これは機能しません。

実際、私は構造的に、あなたがウェブサービスを呼び出すという事実を隠蔽することに対してアドバイスします。

+0

アドバイスありがとうございます。 Webサービスを使用していることを隠すことは望ましくありません。何を望みますか?設定することは、ローカル・テーブルとWebサービスによって提供されるデータの間の「結合」に似たものを実行することは自明です。 。それを行うためのスマートな方法はありますか? – DanM

+0

残念ながら、私の経験は、あなたもそうしたくないということです。データアクセスを明示的に行う場合は、おそらく最適です。データアクセスにはパフォーマンス上の影響があり、失敗する可能性があります。コーディング中にそれを認識することは良いことです。 – usr

+0

一般的な選択n + 1問題は、開発者がデータアクセスを抽象化しようとするときに最も頻繁に発生します。それはちょうどそのように動作しません。 – usr

関連する問題