Я создал проект Web API, в котором я реализую шаблон хранилища.В двух словах, у меня есть следующая структура.
Controller
|
Business/Service Layer
|
Repository
|
DB-Access
Вот код одного из моих сервисных уровней:
public class DashboardService : IDashboardService
{
private readonly IRepository<USERROLE> repoUserRole;
private readonly IRepository<ROLEEXT> repoRoleExt;
public void GetUserInstitution(string UserId)
{
repoUserRole.GetList(x => x.ID == UserId, null).Join(
repoRoleExt.GetList(),
uRole => uRole.ROLEID, roleEx => roleEx.ROLEID, (uRole, roleEx) => new
{
USERROLE = uRole,
ROLEEXT = roleEx
}).ToList();
}
}
GetList
Метод в репозитории выглядит следующим образом:
public class Repository<T> : IRepository<T> where T : class, new()
{
// Some code omitted
public IEnumerable<T> GetList()
{
return DbSet.ToList();
}
public IEnumerable<T> GetList(Expression<Func<T, bool>> predicate, params string[] navigationProperties)
{
IEnumerable<T> list;
var query = DbSet.AsQueryable();
if (navigationProperties != null && navigationProperties.Length > 0)
{
foreach (string navigationProperty in navigationProperties)
{
query = query.Include(navigationProperty);
}
}
list = query.Where(predicate).ToList<T>();
return list;
}
}
Что я хочу:
- Универсальный метод, который может принимать несколько сущностей (объединять их) и возвращать набор результатов.(Также, где этот метод должен быть? (Бизнес или Репо)
Как видно из моего кода, я придерживался следующего подхода:
- Создание экземпляра каждого репозитория <=> Объект типа объекта
- Использование этих объектов позволяет получить данные
Проблема:
- Не уверен, что это правильный подходРеализация шаблона хранилища!
- Если нет Каков наилучший способ справиться с этим?
PS: Мне известно об ошибке, присутствующей в методе GetUserInstitution
.
Редактировать : Кроме того, если не используется универсальный репозиторий, нужно ли создавать несколько репозиториев на основе Entites?