2012-05-24 2 views
0

오늘 메모리에서 조회 데이터를로드하기 위해 프록시 엔티티를 생성합니다.엔티티 프레임 워크에서 조회 테이블/데이터를 어떻게 처리합니까?

내가 엔티티 프레임 워크는이 나라에 가입 생성 할 수있을만큼 영리해야한다, 제안/장소 대신 EF는 메모리에서 데이터를 가져해야

DbContext.Users.Include(u => u.Country.Select(c => c.Place)) 

을 - 테이블.

어떻게 엔티티 프레임 워크에서 조회 데이터를 처리합니까?

+1

무엇이 문제입니까? 노골적으로 말하십시오. –

+0

조회 테이블이 작 으면 RDBMS 측의 메모리에서 이미 가져온 가능성이 있습니다. 조숙 한 최적화는 일반적으로 좋은 일이 아니므로 Microsoft는 그것에 참여하지 않기로 결정했습니다. – dasblinkenlight

답변

0

그래서 액세스하기 전에 EF가 모든 조회 테이블을 메모리에로드하기를 원하십니까? 이것은 조금 지저분하고 무거운 손으로 들립니다. (룩업에 대한 업데이트가 있다면 어떻게 동기화 할 것인가?) Pks를 사용한다면 룩업 테이블에 조인하는 것이 빠릅니다. 만약 당신이 메모리에 룩업 테이블을로드 할 필요가 여전히 테이블 데이터를 보유하고 프록시 개체에 linq 쿼리에 조인을해야합니다. 하드 데이터가 없지만 두 가지 기술간에 성능에 많은 차이가 있음을 알 수 없습니다. Linq 예제가 더 느릴 수 있습니다.

내 경험 법칙은 속도와 보수 측면에서 두 가지 기술이 비슷하다면 복잡하지 않고 유지 관리가 쉬운 기술로 이동하십시오 (귀하의 경우 포함() 사용).

+0

답변 해 주셔서 감사합니다! 나는로드, 내 경우에, 나라와 장소와 아마도 심지어 국가, 캐시 (키/값 사전)에서 조인 (linq 엔터티 SQL 세대에 기대)보다 definetly 빨리해야한다고 생각합니다. 나는 그것이 DB에서 데이터를로드 할 때마다 무의미하다고 생각한다 (이 테이블은 런타임에 절대로 업데이트되지 않는다). nhibernate의 2 차 캐시는 아직 작동합니까? – rafe

+0

런타임에 절대로 업데이트되지 않으면 표를 캐싱 할 때 큰 문제가 발생하지 않습니다. 그러나, 나는 당신이 매우 큰 성능 향상을 보게 될 것이라고 기대하지 않습니다. 두 가지 기술의 성능을 측정 할 수있는 신속한 실험용 콘솔 앱을 작성하십시오. 하나는 항상 데이터베이스에 연결하고 다른 하나는 시작하기 위해 캐시로 이동 한 다음 많은 조인을 실행합니다. 성능 향상으로 구조 변화를 일으키기에 충분하면 10,000 회 반복하십시오. 기억하십시오 - 조숙 한 최적화는 모든 악의 근원입니다. –

관련 문제