0

RIA 도메인 서비스와 함께 Entity Framework를 사용하는 경우 도메인 서비스는 LinqToEntitiesDomainService에서 상속됩니다.이 서비스는 ORM으로 전파되는 낮은 수준 (클라이언트 쪽)에서 LINQ 쿼리를 만들 수 있도록 해줍니다. 즉, 모든 쿼리가 데이터베이스에서 수행되고 관련 결과 만 서버 및 클라이언트에 검색됩니다.RIA의 LinqToEntitiesDomainService에 해당하는 NHibernate

예 :

virtual public IQueryable<Customer> GetCustomers() 
{ 
    return sessionManager.Session.Linq<Customer>(); 
} 

이 방법의 문제가 있다는 것입니다 :

var query = context.GetCustomersQuery().Where(x => x.Age > 50);

는 지금 우리가 DomainService에서 상속과 같이 NHibernate에 세션을 통해 데이터를 검색하는 도메인 서비스를 전체 테이블을 서버 (또는 클라이언트)로 가져 오지 않고 특정 테이블을 필터링하지 않고 특정 쿼리를 작성하는 것은 불가능합니다.

EIA와 함께 작동하는 것처럼 RIA를 통해 NHibernate와 LINQ 쿼리 작업을 수행하는 방법이 있습니까? 그렇지 않으면 성능상의 영향이 너무 심하기 때문에 EF로 전환하려고합니다.

감사합니다.

답변

1

당신은 SQL 프로파일 러를보고 어떤 질문을 받았는지 봤습니까? LINQ를 사용하면 쿼리가이 메서드에서 빌드되지만 실제 실행은 필요할 때까지 발생하지 않습니다.

LINQ 공급자가 IQuerable LINQ 식 트리를 기준으로 변환하기 때문에이 방법이 유용합니다. 실제로 클라이언트에서 LINQ를 사용하는 필터 또는 Silverlight 데이터 원본을 사용하는 필터를 사용하는 경우 요청한 레코드 만 반환됩니다. 쿼리는 데이터베이스 서버의 적절한 WHERE 절로 변환됩니다.

즉, 이 아니며은 모든 레코드를 검색 한 다음 코드 예와 함께 서버에서 필터링합니다. 클라이언트의 필터는 데이터베이스 서버로 끝까지 변환되고 거기에서 필터가 발생합니다.

+0

감사합니다. 나는 그걸 깨달았습니다. System.ServiceModel.DomainServices.Client에 대한 참조를 추가하는 것을 잊었 기 때문에 쿼리가 제대로 작동하지 않습니다. 감사합니다. –

관련 문제