의 인스턴스를 반환하는 리포지토리가있는 많은 프로젝트를보고 IQueryable
있습니다. 이를 통해 IQueryable
다른 코드에서 추가 필터 및 정렬을 수행 할 수 있으며 생성되는 다른 SQL로 변환됩니다. 이 패턴의 출처와 좋은 아이디어인지 궁금합니다.
저의 가장 큰 관심사는 IQueryable
데이터베이스가 열거 될 때 언젠가 데이터베이스에 도달 할 것이라는 약속입니다. 이는 저장소 외부에서 오류가 발생했음을 의미합니다. 이는 Entity Framework 예외가 다른 애플리케이션 계층에서 발생 함을 의미 할 수 있습니다.
또한 과거에 (특히 트랜잭션을 사용할 때) MARS (Multiple Active Result Set)와 관련된 문제가 발생 했으며이 접근법이 더 자주 발생하는 것처럼 들립니다.
리포지토리 코드를 떠나기 전에 데이터베이스가 적중되었는지 확인하기 위해 항상 각 LINQ 표현식을 호출 AsEnumerable
하거나 ToArray
종료했습니다.
반환 IQueryable
이 데이터 계층의 빌딩 블록으로 유용 할 수 있는지 궁금합니다 . 하나의 저장소가 다른 저장소를 호출하여 훨씬 더 큰 빌드를하는 매우 사치스러운 코드를 보았습니다 IQueryable
.
where
deferred에 절을 추가 하면 전체 결과 세트가 아닌 유선을 통해 해당 데이터 IQueryable
를 보내면 됩니다.