我已经实现了Generic存储库,它只依赖于IUnitOfWork(在Infrastructure.Repositories库中),并且还没有使用任何对Entity Framework 4.1 dll的引用。实体框架的DbContext包含EFUnitOfWork,它位于不同的类库中,名为Infrastructure.EntityFramework。但是,我遇到了Linq to Entity查询的一些困难,这可能迫使我在存储库和EF 4.1库中包含直接依赖。
在我的一个类库中,我需要使用以下查询和连接。如何克服存储库中的DBContext使用?
var result = from cc in ProjectXEFDbContext.CurrentContext().PurchaseOrderLineItemCollection
join bb in GetQuery() on cc.PurchaseOrderId equals bb.Id
where bb.Id == purchaseOrder.Id && cc.Total > 50
select cc;
答案 0 :(得分:0)
我创建了我的存储库以在DbContext上公开IQuerables。 DbContext使用UnitOfWork进行换行,如下所示
My Repository base就像这样
/// <summary>
/// Gets the query.
/// </summary>
/// <returns></returns>
public IQueryable<TEntity> GetQuery()
{
return this.UnitOfWork.GetQuery<TEntity>();
}
/// <summary>
/// Loads the type.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public IQueryable<T> LoadType<T>() where T : class
{
return this.UnitOfWork.GetQuery<T>();
}
我的工作单元实施在这里
/// <summary>
/// Gets the query.
/// </summary>
/// <typeparam name="TEntity">The type of the entity.</typeparam>
/// <returns></returns>
public IQueryable<TEntity> GetQuery<TEntity>() where TEntity:class
{
return this.DbContext.Set<TEntity>();
}
我的查询更改如下
var result = from cc in GetQuery()
join bb in LoadType<PurchaseOrderLineItem>() on cc.Id equals bb.PurchaseOrderId
where cc.Id == purchaseOrder.Id && bb.Total > 50
select bb;