2012-02-13 42 views
2

的聯盟假設我有一個實體框架4.2級這樣的:EF查詢來獲取所有子類別

class Company 
{ 
    public int ID { get; set; } 
    public ICollection<Employee> Employees { get; set; } 
} 

我有收集這樣的:

public ICollection<Company> Companies { get; set; } 

什麼是建立一個有效的方法全部職員列表全Companies集合?我不需要擔心重複。

注意:我試圖在沒有實體框架上下文的情況下執行此操作 - 僅使用Companies集合。但是,如果這需要巨大的性能,我可以根據需要獲取上下文。

+0

use DataContext dude – 2012-02-13 05:41:28

+0

這很教條。你有沒有理由? ASP.MVC應用程序的許多部分都無法訪問上下文,並且有必要讓對象能夠執行此查詢而無需執行此查詢。 – 2012-02-13 05:44:14

+0

因爲我認爲這個想法只是在這些拖車桌之間創造了一個多對多的關係! – 2012-02-13 06:38:48

回答

0

我不確定你想達到什麼目的,但要查詢你想要使用的數據DbContext

你可以配置你上下文設置LazyLoadingEnabled爲true,或明確,即查詢數據時,包括使用Include擴展配備EF> 4.0的路徑員工,自動加載相關的實體。

只要所有公司都在那裏,您可以使用SelectMany方法對其進行分析。我沒有檢查,但AFAIK,LINQ to SQL將按需求執行查詢。

如果你堅持不暴露你的DbContext,或者如果您使用的是不同的底層背景下,我建議你把它包起來,做了,因爲後面的SelectMany的倉庫,但你的朋友是IncludeSelectMany

+0

在正確構造的ASP.NET MVC應用程序中,代碼的各部分將無法訪問上下文(或存儲庫)。在這些情況下,如果實體可以在不參考上下文的情況下查詢內容,則它可以非常方便。我將屬性和方法添加到生成的實體類(通過部分類)。我一直查詢沒有上下文的成員。但是我不知道如何在集合中構造所有子元素的聯合。實體類可以簡單地查詢現有的集合。 – 2012-02-13 07:26:52

+1

同樣,如果集合已經實現,可以簡單地使用'SelectMany'函數。無論如何,你如何查詢你的數據?它使用ADO.NET Linq命令嗎?存儲過程?您不想使用內置支持的可擴展性?硬編碼SQL非常難以維護,並且容易出錯,應該通常避免。我認爲這就是LINQ to SQL的原因,無論如何,如果你採用硬編碼的方式使用SPROCS並讓EF知道它們的話。有關更多信息,請參閱[this](http://goo.gl/28dlq)或[this](http://bit.ly/zs8dX6)。 – Shimmy 2012-02-13 07:38:48

+0

謝謝。 'SelectMany()'是我一直在尋找的東西。要查詢數據,我使用EF LINQ查詢。到目前爲止,我已經能夠做這樣的事情,如果需要再次訪問數據庫,它會自動發生。 (沒有人會說硬編碼的SQL。) – 2012-02-13 17:27:43

相關問題