Как я могу выполнять сложные запросы (например, через отношения многие ко многим) в Entity Framework, используя шаблон репозитория? - PullRequest
1 голос
/ 08 февраля 2011

Я использую Entity Framework v4 и шаблон репозитория, найденный в ответе на этот вопрос SO:

Преимущество создания общего хранилища по сравнению с конкретным хранилищем для каждого объекта?

А именно, каждый репозиторий наследует от абстрактного базового класса, который содержит универсальные методы, такие как add, delete и т. Д., А также реализует специальный интерфейс репозитория для любых методов, уникальных для этого репозитория / сущности.

т.

public class CompanyRepository : Repository<Company>, ICompanyRepository {
     public Company Get(int id)
     {
       return base.ObjectSet.SingleOrDefault(x => x.Id == id);
     }
}

Как я могу выполнить более сложные запросы, которые ссылаются на сущности, которые не являются частью этого хранилища ... (скажем, через отношение многие ко многим с другой таблицей)?

public List<Company> GetAllCompaniesForUser(int userId) 
{
    return base.ObjectSet.Where(x => x.Users ?????
}

1 Ответ

4 голосов
/ 08 февраля 2011

Я думаю, что это может быть способ сделать это:

return base.ObjectSet.Where(x => x.Users.Any(u => u.Id == userId)).ToList();

или

var companies = from c in base.ObjectSet
                from u in c.Users
                where u.Id == userId
                select c;

return companies.ToList();
...