2010-12-07 23 views
4

私は3つのテーブルがあるとしましょう:LINQのテーブル間の関係をどうすれば歩くことができますか?

Office 
ID 

SalespeopleOffice 
ID 
OfficeID 
PersonID 

People 
ID 
ManagerID 

LINQ to SQLでは、どのようにSalespeopleOfficesテーブルから開始して、そのテーブルからPeopleテーブルまたはOfficeテーブルへの関係を介して "歩く"ことができますか?具体的には、それらの関係が何であるかを知らずに。オブジェクトと直接対話するのではなく、関係についてのデータを引き出します。私はプログラム的にテーブルの関係を分析する方法を探しています。私が扱っているデータベースにはこれよりも多くのテーブルがありますので、現実にはこれよりもはるかに複雑です。

私は理想的にこれを行うLinqPadスクリプトを作成したいと思います。

答えて

5

。 (LinqPadでは、文脈はthisです)。

  • 値と文字列プロパティ
  • のEntitySetプロパティは[何か] -to-多くの関係を表し、そして
  • 他のタイプだろう、テーブルの上にスカラー場となりますが-to-1の関係[何か]となります。

リレーションシップの2つの側面を接続すると、どちらの場合でも[何か]が何であるか把握できます。それは理にかなっていますか?

編集

私はほんの少しのチャンスをうかがった、より良いアプローチがあります。モデル情報は、Mappingプロパティから使用できます。これを試してみてください:

var tableData = from t in this.Mapping.GetTables() 
       select new 
       { 
        t.TableName, 
        Associations = 
         from a in t.RowType.Associations 
         select new 
        { 
         a.ThisMember.Name, 
         TypeName = a.ThisMember.Type.Name 
        } 
       }; 
tableData.Dump(); 

あなたが自動完成を有効にしてきたと仮定すると、あなたが、このメタデータのプロパティを探索することによって興味のある正確なデータを見つけるために、ケーキの一部でなければなりません。

+0

はい、私はそれが正しい方向だと思います。私はそれが動作するようになる場合は、コードを投稿します。 – jcollum

+0

@jcollum:良い方法があります。私の編集を参照してください。 – StriplingWarrior

1

LINQ to SQLを使用している場合、SalespeopleOfficesインスタンスにはPeopleとOfficeのプロパティがあります。

のようなもの:あなたはコンテキスト内の各タイプの性質を調べるためにリフレクションを使用することができます

var salesPO = dataContext.SalespeopleOffices.First() 
var office = salesPO.Office 
var man = salesPO.People 
+0

本当に何をお探しですか?彼らの名前を前もって知っている関係を見つけるにはどうすればいいですか?私はツリーを横切ることができるようにオブジェクトレベルから抽象化する必要があります。 – jcollum

+0

つまり、Peopleテーブルを指す外部キーを持つすべてのテーブルのリストを取得するにはどうすればよいですか。 – jcollum

関連する問題