4

3つのテーブルがあるとしましょう。

Office
 ID 

SalespeopleOffice 
 ID 
 OfficeID
 PersonID

People 
 ID 
 ManagerID 

LINQ to SQLで、テーブルから開始して、テーブル間の関係を介してそのテーブルからテーブルまたはSalespeopleOfficesテーブルに「ウォーク」するにはどうすればよいですか?具体的には、それらの関係が何であるかを知らなくても。オブジェクトを直接操作するのではなく、関係に関するデータを取得します。テーブルの関係をプログラムで分析する方法を探しています。私が使用しているデータベースには、これよりもはるかに多くのテーブルがあるため、実際には、これよりもはるかに複雑です。PeopleOffice

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

4

2 に答える 2

6

リフレクションを使用して、コンテキスト内の各タイプのプロパティを調べることができます。(LinqPadでは、コンテキストはですthis)。

  • 値と文字列のプロパティは、テーブルのスカラーフィールドになります。
  • EntitySetプロパティは、[何か]と多くの関係を表します。
  • 他のタイプは[何か]対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();

オートコンプリートを有効にしたとすると、このメタデータのプロパティを調べて、関心のある正確なデータを見つけるのは簡単なことです。

于 2010-12-07T21:43:39.893 に答える
1

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

何かのようなもの:

var salesPO = dataContext.SalespeopleOffices.First()
var office = salesPO.Office 
var man = salesPO.People
于 2010-12-07T19:47:37.590 に答える