2012-04-07 4 views
1

저는 우리의 요구 사항에 맞게 확장 가능한 엔티티 프레임 워크 프로젝트를 만들기 위해 노력하고 있습니다. 이 프로젝트는 EDMX 파일, Entity Framework 및 .NET 4.0을 사용합니다. 이 프로젝트는 전 세계적으로 게으른 로딩을 설정합니다.관련된 테이블에 관련 데이터가 존재하는지 여부를 조회하도록 엔티티 프레임 워크를 얻으려면 어떻게해야합니까?

는 기본적으로,이 개 테이블이 :

Product 
    ProductId 

ProductVariant 
    ProductVariantId 
    ProductId 

내가 특정 제품에 대한 ProductVariant에서 관련 행 수십만있을 것입니다 상황이있다. 그래서 ProductVariant에 대한 탐색 속성을 제거하고 모든 관련 데이터가 아닌 가장 관련된 데이터 만 조회하도록 쿼리를 만들고 싶습니다.

그러나, 대부분의 코드가하는 같은 : I가 변경됩니다

if (Product.HasVariants) { [Loop Through Variants And Do Something] } 

:

public bool HasVariants() 
{ 
    return this.Variants.Count > 0; 
} 
:

if (Product.HasVariants) { [Lookup Subset of Variants from DB And Do Something] } 

HasVariants 현재이처럼 보이는 방법은

변형은 탐색 속성입니다. 내가하고 싶은 것은 코드가이 검사를 수행 할 때마다 데이터베이스를 호출하는 대신 관련 테이블에 관련 데이터가 있는지 여부를 나타내는 필드가있는 조회 쿼리를 작성하는 것입니다.

CREATE Procedure GetProduct 
    @ProductId 
AS 

Declare @HasVariants bit 

Set @HasVariants = EXISTS(Select ProductVariantId 
          From ProductVariant 
          Where ProductId = @ProductId) 

SELECT ProductId, <Other Fields>, @HasVariants AS HasVariants 
FROM Product 
WHERE ProductID = @ProductID 

Return 

참고 내가 대신 컬렉션의 HasVariants 방법에서 사용하는 것과 HasVariants 필드의 존재를 :

내가 저장 프로 시저에이를 것이 방법이다.

제 질문은 EDMX 기반 모델을 사용하여 동일한 테이블 (관련 테이블의 조회 필드)을 어떻게 수행합니까? 코드에서 SQL 문을 사용하지 않고이 작업을 수행하려고하지만 솔루션에서 HasVariants를 탐색 속성으로 만들면 가능합니다. 저는 요청에 따라 실행되는 쿼리를 작성하는 방법을 이미 알고 있습니다. 내가 찾고있는 것은 HasVariants 속성을 나머지 제품 데이터와 동일한 방식으로 캐시하는 엔티티 프레임 워크를 만드는 방법입니다.

정보가 충분하지 않으면 용서해주십시오. Entity Framework를 처음 접했을 때이 질문에 답하는 데 필요한 것이 무엇인지 잘 모릅니다.

답변

2

당신이 당신의 저장 프로 시저를 복제 할 경우 새로운 클래스를 생성하고이 같은 것을 구현해야합니다 : 만약 내가 잘못

public IQueryable<ProductWithHasVariant> GetProduct(DBContext context, int productId) 
{ 
    return from p in context.Products 
     where p.ProductId == productId 
     select new ProductWithHasVariant 
     { 
      p.ProductId, 
      HasVariants = p.Variants.Any(), 
      . 
      . 
      . 
     }; 
} 
+0

나를 수정을하지만 할 때마다이 절차가라고 생각 데이터베이스에 쿼리합니다. 내 내장 프로 시저 예제 에서처럼 제품과 함께 부울 상태를 수신하는 유일한 왕복 여행이 있으므로 제품 반입의 일부로이 작업을 수행하는 내장 된 방법을 찾고 있습니다. – NightOwl888

+0

@ NightOwl888 - 답변을 업데이트했습니다. – Aducci