2012-07-25 2 views
0

나는 간단한 카테고리 관리 시스템을 가지고 있습니다.Entity Framework - 외래 키 관계 계산 횟수

class Category { 
    public EntityCollection<Member> Members { get; } 
} 
class Member { 
    public Category ParentCategory { get; } 
} 

내가 그것을 어떤 구성원이있는 경우 카테고리의 삭제를 방지하는 비즈니스 규칙이 있습니다 내 자동으로 생성 된 EF 개체에서

나는 관련성의 두 종류가 있습니다.

if(category.Members.Count() > 0) // then disallow deletion 

그러나이 호출은 항상 0을 반환합니다.

if(!category.Members.IsLoaded) category.Members.Load(); 
if(category.Members.Count() > 0) // then disallow deletion. This works. 

나는 EF는 SQL SELECT COUNT(*) FROM Members WHERE Members.CategoryId = @parentCategoryId 대신에 초기 .Count() 전화를 변환 똑똑 될 것이라고 기대했다 :

내가 DB 히트 incurrs하는, 실제로 첫번째 컬렉션을로드 할 필요가 나타납니다 실제로 구성원 개체를로드하고 메모리를 통해 반복합니다.

EF에서이 작업을 수행 할 수있는 방법이 있습니까? 아니면이를 수행하기 위해 sproc 또는 사용자 지정 SQL을 정의해야합니까?

답변

1

시도

if (category.Members.CreateSourceQuery().Count() > 0)