2013-08-09 2 views
0

작업 단위 (UoW)리포지토리 패턴과 함께 다른 질문이 있습니다. 그래서 저는 UW가있는 저장소가 좋다고 생각합니다. TempHire 해결책은 매우 훌륭하고 이해합니다. 그러나 엔터티가 .expand 또는 .select 인 부모를 요청하는 쿼리를 전달할 때 EFContextProvider는 해당 작업의 저장소를 호출합니까 아니면 Context으로 바로 이동합니까? 나는 이것을 조금 들여다 보았고, 나는 EFContextProvider에 컨텍스트의 인스턴스가 있다는 것을 알았습니다. 저장소 패턴을 사용하여 몇 가지 것을 추상화했기 때문에 걱정 스럽습니다.하지만이 중첩 된 패턴을 적용 할 때 적용되지 않는다고 생각합니다. 행위. 아무도 나를 위해 이것을 확인할 수 있습니까? 이것이 맞다면,이 중첩 된 호출을 위해 DbContext을 모방 한 저장소에 저장되도록 설정해야합니까?Breeze의 깊은 쿼리 관계 탐색 샘플

Thanks Guys and Gals. 유지하기 Breezey

답변

0

EFContextProvider는 breeze.js - metadata 및 SaveChanges의 두 가지를 제공합니다. 쿼리는 UoW 리포지토리로 이동합니다 (https://github.com/IdeaBlade/Breeze/blob/master/Samples/TempHire/TempHire/Controllers/ResourceMgtController.cs 참조).

+0

예, 처음 요청에 대한 저장소로 이동한다는 사실을 알고 있습니다. ** 깊은 쿼리 **에 더 관심이 있습니다. 기본적으로, 나는 아이들과 부모에게 접근하기위한 저장소 패턴이 필요하다. – mtleising

1

TempHire에서 구현 된 리포지토리는 모든 쿼리에 대한 기본 IQueryable을 반환합니다. .expand 또는 .select는 쿼리가 실행되기 전에 단순히 기본 IQueryable에 추가됩니다. EFContextProvider는 절대로 저장소를 호출하지 않습니다. WebAPI 컨트롤러는 저장소를 호출하여 기본 IQueryable을 가져옵니다. 저장소는 EFContextProvider 내부의 DbContext에서 가져옵니다. 리포지토리는 IQueryable에 추가 할 수 있으므로 최종 IQueryable을 실행하는 Breeze.NET에 반환되기 전에 WebApi 컨트롤러에서이를 수행 할 수 있습니다. 즉, 기본 IQueryable을 반환하는 리포지토리의 모든 논리는 쿼리를 그대로 실행하거나 .expand 또는 .select를 적용 할 때 적용됩니다.

+0

내 진짜 질문은 내가 그 IQueryable을 제한 할 수있을 것 같은가요? 특정 사용자에게만 제한하려는 행이 있지만 상위의 리포지토리 패턴을 사용하여이 작업을 쉽게 수행 할 수 있습니다. 그러나 추가 된 쿼리는 제한된 데이터를 반환 할 수 있습니다. 어떤 통찰력? – mtleising

+1

네, 그렇게 할 수 있습니다. 데이터 집합을 제한하는 "Where"절을 사용하여 원하는 모든 기본 IQueryable을 작성합니다. 클라이언트가 .expand 또는 .select를 추가하면 제한된 데이터 세트에 적용됩니다. – superswiss

+1

.expand를 제한 할 수는 없지만 언급해야합니다. .expand는 Entity Framework로 직접 전달되므로 클라이언트는 탐색 경로 중 하나를 통해 제한되지 않은 데이터를 요청할 수 있습니다. 많은 개발자들은 .expand를 허용하지 않습니다. – superswiss