2012-09-19 63 views
4

我的.edmx文件上有一個名爲Client的實體。我需要運行幾個linq querys它,但在所有這些,我需要一個過濾器(讓說活動= 1)。在EF上使用默認篩選器的實體

我不想在我的所有查詢中都有一個where c.active == 1,更有意義的是我的實體應用了默認過濾器。這是可以做到的嗎?

或者也許我可以有一個查詢作爲基地,而不是表的實體? (我在數據庫的第一種方法)

我知道另一種解決方案將創建一個數據庫的視圖和鏈接的實體視圖,但我不希望這一點。

+0

你想修改該實體嗎?你想訪問不活躍的客戶嗎? –

+0

不,對於這個應用程序,就像非活動客戶端不存在 – Diego

+0

[如何將實體框架應用全局過濾器?](http://stackoverflow.com/questions/2624597/how-to-apply-global- filter-on-entity-framework) –

回答

2

您可以添加額外的方法到您生成的數據庫方面:

partial class DatabaseContext // same name as your generated context 
{ 
    IQueryable<Client> ActiveClients { get { return Clients.Where(c => c.active == 1); } } 
} 

而且用它在你的代碼。由於它是部分類的一部分(在除生成的上下文類之外的其他文件中定義),因此刷新模式時不會受到codegen工具的影響。

+2

這很好,但它不適用於導航屬性,例如。它不會自動應用於所有內容。 – usr

+0

聽起來像一個好主意Bartosz。 @usr,你能澄清你的陳述嗎?爲什麼不起作用? – Diego

+1

@Diego當你說'Employee e;這不會過濾你得到的結果。 e.Clients「(假設員工和客戶之間爲1:n)。這個表達式也會返回不活動的。我不知道巴託斯提出了什麼,我知道這種需求遲早會出現。 – usr