SOAP를 사용하여 노출되는 RIA 서비스를 작성 중입니다. 메소드 중 하나는 매우 큰 테이블에서 데이터를 읽어야합니다. 내가 좋아하는 일을하고 있었다 초에 ObjectContext, 엔터티 및 로딩 성능
: 나는 성능에 대한 걱정 때문에public IQueryable<MyItem> GetMyItems()
{
return this.ObjectContext.MyItems.Where(x => x.StartDate >= start && x.EndDate <= end);
}
하지만 그때 멈췄다.
MyItemsis가 완전히로드 된 것을 이해하고 "Where"는 MyItems 속성의 첫 번째 액세스에서로드 된 요소를 필터링합니다. MyItemswill에는 실제로 많은 행이 있기 때문에 이것이 올바른 접근 방식이라고 생각하지 않습니다.
Google에 약간의 질문을했지만 재미있는 결과가 없었습니다.
그래서 GetMyItems 메서드 내에서 컨텍스트의 새 인스턴스를 만들고 MyItems를 선택적으로로드 할 수 있다고 생각했습니다. 다음과 같이하십시오 :
public IQueryable<MyItems> GetMyItems(string Username, DateTime Start, DateTime End)
{
using (MyEntities ctx = new MyEntities())
{
var objQuery = ctx.CreateQuery<MyItems>(
"SELECT * FROM MyItems WHERE Username = @Username AND Timestamp >= @Start AND Timestamp <= @End",
new ObjectParameter("@Username", Username),
new ObjectParameter("@Start", Start),
new ObjectParameter("@End", End));
return objQuery.AsQueryable();
}
}
그러나 이것이 올바른 방법인지는 잘 모르겠습니다.
저를 도와 주시고 올바른 방법을 알려주십시오.
미리 감사드립니다. 건배, Gianluca.
나는 이것을 좋아할 것이다. ToTraceString으로 확인한 결과 쿼리가 제공된 매개 변수를 사용하여 빌드 된 것을 볼 수 있습니다. 이는 가능한 성능 문제를 해결하기위한 것입니다. Craig 감사합니다! –
이 게시물을 읽는 다른 사용자의 경우 : http://msdn.microsoft.com/en-us/library/cc853327.aspx에서도이 흥미로운 페이지를 발견했습니다. 건배, G. –