【发布时间】:2012-03-02 14:51:21
【问题描述】:
我在 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 上下文?
谢谢!
【问题讨论】:
标签: c# linq repository ef-code-first