Расширить EF Entity методы поиска - PullRequest
0 голосов
/ 03 февраля 2012

Я использую EF 4.2, и изначально я катал свои собственные классы репозитория для каждого набора сущностей.Когда я исследовал далее , я понял, что DbContext и IDbSet реализовали необходимую единицу работы и шаблон репозитория.

Это прекрасно работает, но я также хотел бы, чтобы некоторые "вспомогательные" методы возвращали конкретные объекты, используя часто запрашиваемые свойства, отличные от первичного ключа.

Например, чтобы выбрать сотрудника по электронной почте и статусу учетной записи, а не по первичному ключу Id.Мой оригинальный пользовательский репозиторий был перегружен для этого.

Мой вопрос: где мне добавить этот вспомогательный метод?Я вижу, что у меня есть несколько вариантов:

  1. Добавьте класс типа обслуживания логики домена с помощью этого метода, который использует dbContext и используется другими классами и методами логики домена.
  2. Расширениекласс DbContext для добавления дополнительного метода.
  3. Замените IDbSet на собственный репозиторий.
  4. Оберните dbContext в дополнительные классы репозитория для каждого набора сущностей и добавьте метод в пользовательский набор,

Кажется, у каждого есть свои плюсы и минусы, но я больше склоняюсь к 1 или 2. Есть мысли?

1 Ответ

1 голос
/ 03 февраля 2012

Вы можете использовать собственный метод расширения и использовать его повторно:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...