2010-12-07 95 views
4

比方說,我有三個表:我該如何「走」LINQ中表格之間的關係?

Office 
ID 

SalespeopleOffice 
ID 
OfficeID 
PersonID 

People 
ID 
ManagerID 

在LINQ to SQL,我怎麼可以從SalespeopleOffices表開始,通過表之間的關係「走」,從該表到People表或Office表?特別是不知道這些關係是什麼;拉取有關關係的數據,而不是直接與對象交互。我正在尋找一種以編程方式分析表關係的方法。我正在使用的數據庫有比這更多的表,所以實際上它比這更復雜。

我最好想創建一個LinqPad腳本來做到這一點。

回答

5

您可以使用反射來檢查在上下文每種類型的屬性。 (在LinqPad中,上下文是this)。

  • 價值和字符串屬性會在桌子上標量場,
  • EntitySet的屬性將代表[某件事]一對多的關係,並
  • 其他類型將是[東西] -to-一個關係。

如果你連接關係的兩面,你可以找出每件事情[什麼]。那有意義嗎?

編輯

我只是閒逛了一下,有一個更好的辦法。模型信息可通過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(); 

假設您已經激活自動完成,它應該是小菜一碟找到你通過探索這個元數據屬性感興趣的確切數據。

1

如果您使用的是LINQ to SQL,那麼您的SalespeopleOffices實例必須具有人員和Office屬性。

喜歡的東西:

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

不是我真正想要的。我怎麼能提前知道這些關係的名稱?我需要將它從對象級別抽象出來以便能夠遍歷樹。 – jcollum 2010-12-07 21:05:06

+0

即我如何獲得所有具有指向People表的外鍵的表的列表? – jcollum 2010-12-07 21:09:49