2012-12-08 103 views
0

我是新來的實體框架,現在我可以通過id加載父項。在實體框架中從父項中獲取子項4

但是我想在我加載父項後從父項訪問子項屬性。

protected void getChild_Click(object sender, EventArgs e) 
    { 
     JeansEntities db = new JeansEntities(); 
     Employe employe = db.Employes.SingleOrDefault(p => p.Id == 3); 

     uxCountry.Text = //(address.Country) Its the child of Employe, but I can acces by the parent 
    } 

enter image description here

感謝

+0

我做兩個答案的代碼行,我仍然可以訪問地址子... – FrankSharp

+0

根據你的圖,你的員工有多個地址。你期望得到哪一個? –

回答

1

你可以讓查詢知道你還想要解決兒童實現這一目標。您可以通過使用「急切加載」來完成此操作。這是由Include("NavigationPropertyName")

protected void getChild_Click(object sender, EventArgs e) 
{ 
    JeansEntities db = new JeansEntities(); 
    Employe employe = db.Employes.Include("Addresses") 
     .SingleOrDefault(p => p.Id == 3); 

    var address = employe.Addresses.FirstOrDefault(); 

    if (address != null) 
     uxCountry.Text = address.Country; 
} 

做是爲了這個工作,你必須包括在EDM EmployeAddresses之間的關係。

+0

這是不行的... – FrankSharp

+1

根據他的模型Employee,有多個地址。 –

+0

是的僱員可以有2個地址或一個 – FrankSharp

0

您可以使用包含在你的LINQ查詢:

Employe employe = db.Employes.Include(e=>e.Address).SingleOrDefault(p => p.Id == 3); 

或者你可以使用懶人評估,如果您的導航屬性是虛擬的。在這種情況下,當你的DBContext數據庫沒有被處置時,你可以使用var address = employe.Address,EF從你的數據庫中獲取它。

更新:你應該#using System.Data.Entity;

+0

這不行... – FrankSharp

+0

有什麼症狀?它是編譯?它拋出任何異常或什麼? –

+0

Employe employe = db.Employes.Include(c => c.Addresses).SingleOrDefault(p => p.Id == 3);拋出異常:錯誤無法將lambda表達式轉換爲鍵入'string',因爲它不是委託類型 – FrankSharp