2009-12-23 1 views
2

사용자 지정 클래스를 매개 변수로 전달하여 쿼리 메서드에 전달하여 엔터티 컬렉션을 반환합니다. 이 같은 것이 필요합니다WCF RIA Services - 사용자 지정 개체를 매개 변수로 쿼리 메서드에 전달

[Query] 
public IEnumerable<MyEntity> Search(SearchParams params) 
{ 
//do something here 
} 

public class SearchParams 
{ 
    public string FilterParam1 {get; set;} 
    public string FilterParam2 {get; set;} 
    public string FilterParam3 {get; set;} 
    public string FilterParam4 {get; set;} 
    public string FilterParam5 {get; set;} 
...and so on... 
} 

공유 코드를 사용하여 클라이언트 측에서 SearchParams 클래스를 사용할 수있게 만들려고했습니다. 그러나 문제는 아무 작업 (쿼리 또는 호출)도 원시 serializable 형식이 아니므로 SearchParams 클래스를 전달할 수있는 메서드를 만들 수 있다는 것입니다. SearchParams 클래스에는 약 15 개의 속성이 있습니다.

15 개의 매개 변수로 쿼리 작업을 생성하고 싶지 않습니다. 좋은 대안이 있다고 제안 해주세요.

+0

VS2010/.NET 4를 사용하고 있습니까? 쿼리 메서드에 매개 변수로 복잡한 형식을 구성하는 것이 가능하다고 생각합니다. –

+0

아니요, VS2008/.NET 3.5 만 사용하고 있습니다. 제품은 6 개월 이내에 생산에 들어가야합니다. –

답변

0

나는 쿼리 방법은 인수로 Query 소요 "실행"

당신이 사용하는 Load 방법 :-) 쿼리 방법 요점을 놓친 것 같아요. 자신의 "쿼리 개체"를 사용하는 대신 해당 쿼리를 사용하십시오. 이 같은

예를 들어 뭔가 :

EntityQuery<YourEntity> query = from e in dx.GetYourEntityQuery() 
           where e.Foo == "something" 
           select e; 

dx.Load<YourEntity>(query); 
+0

당신이 옳다.방금 전 지점을 놓친 –

+1

하지만이 솔루션을 사용하여 문제가 나는 사용자 정의 엔티티 프레임 워크를 사용하고 저장 프로 시저를 사용합니다. 모든 레코드를 웹 서버에 가져온 다음 필터링합니다. 성능에 영향을 미쳤지 만 여전히 열려있는 질문입니다. –

0

프레드릭 말했듯이, RIASvcs의 주요 포인트 중 하나는 서버, 클라이언트에서 와이어를 통해 사용자 지정 쿼리 (LINQ 식을) 보낼 수있다, 거기서 처형 해.

모든 레코드를 웹 서버에 가져온 다음 필터링합니다.

정확하게 이해한다면, 사실이 아닙니다. 피들러를 가져오고 앞뒤로 보내지는 것을 확인하십시오. 실제로 서버에서 필터링되고 클라이언트에게만 반환됩니다. 물었다.

+0

예, 여러분도 동의합니다.하지만 모든 레코드를 서버에 가져 와서 필터를 걸지 않고 데이터베이스 수준에서만 필터링하려고합니다. 몇 가지 매개 변수를 보내서 할 수 있지만 제 경우에는 15 개의 매개 변수가 있습니다. 나는 15 개의 매개 변수로 메서드를 만들고 싶지 않습니다. 매개 변수로 보낼 사용자 지정 개체를 만들고 싶습니다. –

0

Martin Fowler가 SOA에 대해 말한 내용을 읽은 경우 : 원격 Facade (388)와 같은 원격 인터페이스로 작업 할 때마다 그에 대한 호출이 비쌉니다. 결과적으로 통화 수를 줄여야하므로 통화 할 때마다 더 많은 데이터를 전송해야합니다. 질문에 단 하나의 대답 만 있습니다. 클라이언트에서 간단한 구문을 제공하려는 경우처럼 Expression이나 Func와 같은 복잡한 유형을 WCF를 통해 노출하는 것은 의미가 없습니다. DataContract를 사용하여 쿼리를 나타내는 Dto를 노출합니다.

1

반환 된 엔티티에서 변경 내용 추적 등을 희생 할 준비가되어있는 경우 대신 '호출'방법을 사용할 수 있습니다. 이렇게하면 복잡한 유형을 매개 변수로 전달할 수 있습니다 (클라이언트에 노출 된 경우).

복합 형식을 반환하는 더미 쿼리 메서드를 작성하여 형식을 노출 할 수 있습니다.

자세한 내용은 other question을 참조하십시오.

알고있는 한, 'Query'메소드에 매개 변수로 복잡한 유형을 전달할 수있는 능력은 로드맵에 있지만 현재 사용할 수 없습니다.