이 코드 줄을 참조하십시오. 이것은 ObjectResult<long?>
을 리턴하는 저장 프로시 듀어의 호출입니다. 긴 값을 추출하기 위해 나는 선택을 추가 :.NET 엔터티 프레임 워크 - IEnumerable VS. IQueryable
dbContext.FindCoursesWithKeywords(keywords).Select(l => l.Value);
이 선택 IEnumerable<long>
를 반환합니다.
어딘가에 읽었는지, 아니면 그냥이 가정에 익숙해 졌는지 확실하지 않습니다. EF API가 IEnumerable
(및 IQueryable
이 아님)을 반환하면 결과가 구체화되었다는 것을 항상 생각했습니다. 그들이 데이터베이스에서 뽑혔다는 의미입니다.
오늘 내가 잘못된 것이라고 알았습니다 (또는 아마도 버그입니까?). 난 당신이 동안 변경 사항을 저장하기 위해 노력하고 있음을
은 기본적으로
"세션에서 실행중인 다른 스레드 가 있기 때문에 새로운 트랜잭션이 허용되지 않습니다",이 오류를 알려주는 오류가 계속 DB 리더가 여전히 레코드를 읽는 중입니다.
은 결국 나는 (나는 장거리 슛으로 간주 것)에 의해 그것을 해결하고
그래서 구체화IEnumerable<long>
...ToArray()
전화를 추가 - 하단 라인 - 나는 피난처 그 결과를 포함하는 EF에서IEnumerable
결과를 기대한다 아직 실현되지 않았습니까? 그렇다면IEnumerable
이 구체화되었는지 여부를 알 수있는 방법이 있습니까?IEnumerable<T>
에서 작업감사이 그 'duhhh'질문 중 하나 인 경우 사과 ... :)
EF에 대해 특별히 문서화 된 것이 있는지는 잘 모르겠지만 일반적으로 Linq의 경우 'IEnumerable'은 'IQueryable '보다 "materialized"되지 않습니다. 둘 다 일반적으로 지연된 실행을 사용한다고 가정합니다. –
@Damien_The_Unbeliever : 그러나 ObjectResult은 함수가 호출 될 때 항상 실행됩니다 (이 경우 FindCoursesWithKeywords) –