EF 4.1 +存储库+ UnitOfWork +使用EF删除依赖关系

时间:2011-08-03 03:06:17

标签: entity-framework-4.1

我已经实现了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;

1 个答案:

答案 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;