扩展EF实体检索方法

时间:2012-02-03 12:07:25

标签: entity-framework-4 entity-framework-4.1 repository

我正在使用EF 4.2,最初我已为每个实体集滚动了我自己的存储库类。在我调查further时,我意识到DbContext和IDbSet实现了我需要的工作单元和存储库模式。

这很好用,但我还想要一些“帮助”方法来使用除主键之外的常用请求属性来返回特定实体。

例如,通过电子邮件和帐户状态而不是Id主键选择员工。我的原始用户存储库有一个重载。

我的问题是我应该在哪里添加这个辅助方法?我认为自己有几个选择:

  1. 使用此方法添加域逻辑服务类型类,该类使用dbContext,并由其他域逻辑类和方法使用。
  2. 扩展DbContext类以使用其他方法。
  3. 将IDbSet替换为自定义存储库。
  4. 将dbContext包装到每个实体集的其他Repository类中,并将方法添加到特定于用户的方法中。
  5. 每个人似乎都有利有弊,但我更倾向于1或2.任何想法?

1 个答案:

答案 0 :(得分: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();