2012-02-03 69 views
0

我使用EF 4.2,最初我爲每個實體集推出了自己的存儲庫類。正如我調查further我意識到,DbContext和IDbSet實現了我需要的工作單元和存儲庫模式。擴展EF實體檢索方法

這很好,但我也想用一些「助手」方法來返回使用除主鍵以外的常用請求屬性的特定實體。

例如,通過電子郵件和帳戶狀態而不是Id主鍵選擇員工。我的原始用戶存儲庫有這個重載。

我的問題是我應該在哪裏添加這個輔助方法?我認爲自己有以下幾種選擇:

  1. 添加一個域邏輯服務類型類,該方法使用dbContext,並被其他域邏輯類和方法使用。
  2. 擴展DbContext類以具有其他方法。
  3. 用自定義存儲庫替換IDbSet。
  4. 將dbContext包裝在每個實體集的其他Repository類中,並將方法添加到用戶特定的方法中。

似乎每個人都有優點和缺點,但我更傾向於1或2。任何想法?

回答

1

可以使用自定義擴展方法和重用:

public static IQueryable<Employee> Find(this IQueryable<Employee> query, 
             string email, string status) 
{ 
    return query.Where(e => e.Email == email && e.Status == status); 
} 

現在,您將使用它只是想:

var employee = context.Employees.Find(email, status).FirstOrDefault(); 
+0

那是我的第五個選項;)我已經提取的界面與我上下文(使用T4模板),我正在使用我的域邏輯類中的這個接口。我可以/應該將它添加到界面的簽名中嗎? – 2012-02-03 17:50:28

+0

這是擴展方法 - 它是靜態的,所以它不是任何接口的一部分。 – 2012-02-03 17:53:09