2011-10-06 60 views
5

我有一個包含調查實體集合的用戶實體。我希望關聯在關係中包含一個過濾器,例如'IsCompleted',所以無論何時我急於加載(或延遲加載該集合),都會發生這種過濾。實體框架4(使用過濾器配置的關聯)

這是我們控制的東西嗎?

謝謝!

回答

0

如果您使用的是支持視圖的數據庫後端,則可以考慮使用視圖作爲調查實體集合的來源。利用數據庫的強大功能爲您進行過濾。

0

爲實體加載關聯始終只是獲取它們全部,無論是因爲您在初始查詢期間使用了「包含」,事實上稱爲「加載」,還是延遲加載導致了它。導航屬性種類的概念假定了這種行爲。

E.J. Brennan's answer會運作良好。如果您不擔心在後臺加載所有調查(由於性能/內存原因等原因),那麼您也可以考慮通過實體上的部分類定義創建單獨的屬性,以返回經過篩選的列表。

public partial class User 
{ 
    public ICollection<Survey> CompletedSurveys 
    { 
     get { return Surveys.Where(s => s.IsCompleted); } 
    } 
} 
+0

這似乎是一個重要的缺失功能,其他ORM的支持,它在企業應用程序中非常關鍵。謝謝。 – Marco

+0

它是如何失蹤的功能?如圖所示,通過部分類將過濾的集合添加到實體是相當簡單的。你是否期待它成爲EDMX設計師的一個選擇?與此相關的問題是實體模型僅涉及模式和關係。這是EF存在的關係的一個人爲因素,EF所知道的是它生成的實體對象類帶有方便的導航屬性。自定義關聯過濾器超出了實體模型定義的範圍,並且無論如何都可以用LINQ /代碼輕鬆解決。 –

+0

您提供的示例過濾了內存中的集合,並且在處理具有屬於聚合的關聯集合的大量記錄時,您正在將自己繪製到一個角落。 – Marco