Я создал общий репозиторий с некоторыми методами поверх EF Codefirst, который прекрасно работает. Метод Get выглядит следующим образом (включает один уровень)
public virtual IEnumerable<T> Get(
Expression<Func<T, bool>> filter = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
string includeProperties = "")
{
IQueryable<T> query = _dDbSet;
if (filter != null)
query = query.Where(filter);
query = includeProperties.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
return orderBy != null ? orderBy(query).ToList() : query.ToList();
}
Но я сталкиваюсь с проблемой, когда мне нужно, чтобы общий репозиторий возвратил «более глубокое» включение
Пример: объект Hotel имеет отношение к списку комнат, а каждая комната имеет отношение к человеку.
Я хочу, чтобы мой метод возвращал объект Hotel со списком комнат с указанием лица этих комнат.
Как я могу решить эту проблему с помощью GenericRepository?
Я не хочу использовать решение:
var hotel = _hotelRepository.Context.Hotels.Where(p => p.HotelId == HotelId).Include(p => p.RoomList.Select(b => b.Person)).First();
в моем бизнес-классе, потому что я хочу отделить доступ к данным в genericRepository и иметь возможность вычеркнуть метод из моего тестового проекта.
Есть ли хорошее решение для этого, или мне нужно использовать контекст с Select, как упомянуто выше?
Спасибо!