2010-06-24 56 views
3

我正在爲我的.NET應用程序使用實體框架。我已經能夠返回對象及其直接相關的對象(非常方便),但是我無法獲取這些對象的對象。實體框架:獲取不直接相關的對象

IEnumerable<Lot> i = (((ObjectSet<Car>)_carRepository.GetQuery()) 
            .Include(a => a.CarTypes).Take(10).ToList() 

這工作,我可以訪問carTypes,但我無法弄清楚如何訪問與CarTypes關聯的表(具有與汽車相關類型的字段如表)。

我試圖使用加入,但我無法弄清楚如何讓它正常工作。

所有幫助表示讚賞。

回答

1

包含可以被鏈接,但是您必須記住它使用的是字符串而不是lambda表達式。所以你這樣做。包括(「CarTypes.Company」)如果你想要一個兩級包含。你也可以鏈接Include語句,這意味着包括來自同一頂層的多個分支 - 例如。 .INCLUDE( 「CarTypes」)。包括( 「SomeOtherTypeFromTheSameParentAsCar」)。

但是,您應該記住,深層的包含語句可能不會產生儘可能好的性能,因爲Include的每個部分只是添加到您正在構建的一個查詢中,因此您將獲得更大和更復雜的查詢它會在封面下面進行一連串的連接。有時候,在一個查詢中執行一些包含操作會更有效,然後發出第二個查詢來獲取其餘數據或類似內容。

使用EF4,您還可以設置延遲加載,這有時會使這種事情變得更加容易(但它當然會產生多次往返而不是一次或兩次非常大的往返行程)。

0

我相信你可以鏈包括...所以你可以有像

.Include(a => a.CarTypes.Company) 

如果你僅僅使用一個或兩個字段從各類型,一種可能性是建立在一個視圖D B。然後,您可以將此視圖添加到您的EF模型並直接訪問這些屬性。

+0

這不起作用。你確定這通常是可能的嗎?如果是這樣的話,這可能是我們底層架構的嚴重問題。 – smdrager 2010-06-25 13:54:18

+0

我不積極。我不需要做多個包含,但我認爲我已經閱讀過某個地方可以有2或3個或n個包含語句 – taylonr 2010-06-25 15:44:31

相關問題