2011-08-03 4 views
1

IUnitOfWork(Infrastructure.Repositoriesライブラリ内)にのみ依存する汎用リポジトリを実装し、Entity Framework 4.1 dllへの参照も使用していません。 Entity FrameworkのDbContextは、Infrastructure.EntityFrameworkという別のクラスライブラリにあるEFUnitOfWorkでラップされています。しかし、私はLinqとEntityのクエリにいくつかの問題を抱えていました。リポジトリとEF 4.1ライブラリに直接依存することを余儀なくされるかもしれません。EF 4.1 +リポジトリ+ UnitOfWork + EFとの依存関係の削除

私のクラスのリポジトリの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

を次のように私のリポジトリベースは作業の実装のこの

/// <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>(); } 

変更になり、次のようにUnitOfWorkのでラップDbContext何質問ですか?リポジトリの実装がわからないため、クエリに何が間違っているか分かりません。 –

+0

実際には私のクエリで間違ったことは何もなく、私の心配はEFとリポジトリ層の依存関係です "ProjectXEFDbContext.CurrentContext()。PurchaseOrderLineItem"はDBコンテキストから来ていて、私はこの依存関係をリポジトリレイヤから削除したいと思います。 – marvelTracker

答えて

0

DbContextにIQuerablesを公開するためにリポジトリを作成しました。

 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;