2011-02-08 6 views
1

내 asp.net mvc 2 응용 프로그램에서 오히려 데이터 - 무거운 작업이 있습니다. 리포지토리 패턴을 사용하는 동안 쿼리에 linq-to-sql을 사용하고 있습니다. SQL Server 프로파일 러에서 작업 실행을 검사 할 때 약 60 개의 쿼리가 실행되고 있음을 발견했습니다. 내 질문은 - 그리고 거기에 충분한 정보가 질문에 대답하기를 바랍니다 - asp.net mvc, 전후방, 네 번째, 데이터베이스, 각 쿼리에 대한 전체 왕복을 만들거나 그것은 linq의 사용, 실제로 단 한 왕복은 무엇입니까?LINQ-to-SQL - 데이터베이스에 언제 액세스합니까?

답변

1

귀하의 Linq가 어떻게 생겼는지에 따라 다릅니다. 결과 집합이 열거 될 때 데이터베이스에 도달한다는 것이 내 이해입니다.

+0

{<을 --- 쿼리는 결과

...

으로 뭔가를 할 때 실행} 고맙겠지 만 명확히 할 수 있겠습니까? "결과 집합이 열거 될 때"는 무엇을 의미합니까? - 쿼리가 IQueryable 또는 IEnumerable과 같은 것을 반환 할 때 말하기를 원하십니까? – user560498

+0

열거는 Chris가 아래에서 말한대로 결과에 액세스하는 것을 의미합니다. 콜렉션 또는 IQueryable 위로 마우스를 가져 가면 디버거를 사용하고 결과 새로 고침 아이콘을 클릭하는 것과 비슷합니다. 결과는 게으른로드됩니다. 당신은 카운트와 같은 것들에 접근 할 수 있지만 결과를 어딘가에 사용할 때까지 데이터베이스에 도달하지 않습니다. 따라서 열거합니다. –

2

LINQ 쿼리 또는 원시 SQL 이건간에 쿼리 당 왕복 1 회라고 생각합니다. 나는 그것이 "각각의 모든 쿼리"가 의미하는 바에 달려 있다고 생각합니다.

위의 의견에 응답하려면 :

var에 결과 = LINQ를; < --- 쿼리가 발생하지만,

foreach는 (결과에 YourDataType의 YDT) 실행되지 않습니다

+0

만약 당신의 대답이 내가 할 수 있다면 ... 당신의 대답은 내가했던 재검사와 일치한다. 나는 나의 행동에 브레이크 포인트를 넣고 동시에 프로파일 러를 점검하고 실제 선택이 실제로 실행되었음을 보여 주었다. 쿼리 결과를 사용하는 지점에서만 그러나 왕복 여행까지, 나는 그것이 내가 그 행동에 가지고있는만큼 많은 선택을 할 때 받아 들일 수없는 각각의 모든 선택을위한 완전한 왕복 여행을 할 것이라고 생각한다. – user560498

+0

나는 그를지지했다. 컬렉션의 결과에 액세스하면 열거됩니다. –

+0

어쨌든, 이것은 너무 늦었을 수도 있지만 데이터베이스에 대한 여러 번의 왕복과 비슷한 문제가있었습니다. 이것 좀 봐 : http://stackoverflow.com/questions/4822284/more-efficient-linq-query –