문제

모두,

그래서 LINQ-to-SQL의 모든 선택 쿼리를 CompiledQueries를 사용하여 속도를 높이는 것으로 변환했습니다. Select 문을 위해 지금까지 잘 작동하지만 인서트, 업데이트 또는 삭제하는 방법을 알 수 없었습니다.

LINQ-to-SQL에 삽입, 삭제 또는 업데이트를 할 때 객체 모델을 사용해야합니다. 그러나 분명히 어딘가에 쿼리가 생성되는데, 이는 정적 멤버에 사전 컴파일하고 저장하는 것이 좋습니다.

이게 가능해? 미리 컴파일되지 않은 경우 업데이트, 삭제 및 인서트에 대한 LINQ 성능은 어떻습니까? 그들이 선택하는 것보다 훨씬 빠른 것을 볼 수있었습니다. 왜냐하면 그들이 아래에하는 일이 훨씬 단순하고 "동적"이기 때문입니다 ...

도움이 되었습니까?

해결책

큰 차이가 있습니다. LINQ-to-SQL SELECT 쿼리는 큰 복잡한 표현식 나무 일 수 있습니다. 이것들은 언젠가 '컴파일'이 필요할 수 있습니다. 이 경우 SQL 서버에 대해 실행할 수있는 일부 T-SQL로 합쳐집니다. 따라서 작업 결과를 재사용 할 수 있도록 작업 결과를 캐시하는 것이 합리적입니다.

그러나 다른 삭제, 업데이트 및 삽입물은 표현식 트리를 T-SQL로 변환 할 필요가없는 간단한 작업입니다 (LINQ 자체는 모두 쿼리에 관한 것입니다). 불행히도 우리는 이러한 다른 작업을 '쿼리'로 수행하는 SQL 코드를 생각하도록 훈련 된 것은 불행한 일입니다. 우리는 어떤 정보도 요구하지 않습니다.

이러한 작업은 LINQ가 아닌 DataContext에 의해서만 정의되므로 이러한 기능을 수행하는 코드는 이미 컴파일되었습니다.

다른 팁

Delete가 사소하게 간단하기 때문에 세 가지 전용 삽입물이 컴파일 및 재사용 할 수 있다는 것이 합리적이라고 생각합니다 (키가 키가있는 테이블에서 삭제) 및 업데이트는 변경된 필드 만 업데이트하고 업데이트 작업마다 다릅니다.

) 아미엔

L2S는 "SP_EXECUTESQL"을 사용하므로 처음 실행하면 저장 프로 시저 실행 계획 캐시에 있습니다. 후속 실행 (동일한 쿼리 - 동일한 쿼리)은 캐시에서 컴파일 된 계획을 재사용합니다. 그래서 당신이 요구하는 것은 SQL Server 'Behind the Scenes'에 의해 자동으로 처리됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top