2013-07-03 3 views
0

으로 반환합니다. C#에서 Entity Framework를 사용하여 데이터를 검색하는 웹 서비스를 만들고 있습니다.asmx webservice에서 중첩 된 EF 객체를 C#

관련 테이블 2 개 (사람, 역할)가 있습니다.

각 개인은 역할이 연관되어 있습니다.

나는 반환 된 객체가 Person이고 관련 역할이 포함되기를 바랍니다.

나는이 같은 쿼리를 실행하면 : 디버그

From p in ef.Person.Include("Role") select p 

내가 각 사람의 역할 객체가로드 된 것을 볼 수 있습니다.

그러나 반환 된/생성 된 XML에는 관련 객체에 대한 정보를 제공하지만 객체 자체에 대한 정보는 제공하지 않는 RoleReference 만 포함됩니다.

엔티티 framwork에 의해 생성 된 클래스에 Serializable 특성을 추가하려고 시도했지만 webmethod에는 xmlInclude 특성을 추가했지만 아무것도 변경하지 않았습니다.

이 문제를 어떻게 해결할 수 있습니까?

감사합니다.

플라 비오

+0

쿼리 결과를 반환하는 데 사용되는 코드를 표시 할 수 있습니까? – Botis

답변

0

자신의 클래스 사람 & 역할을 만들고 그들을 위해 만들 매퍼 :

public class MyPerson 
{ 
    [DataMember] 
    public int ID {get; set;} 
    [DataMember] 
    public string Name {get; set;} 
    ... 
    [DataMember] 
    public MyRole PersonRole {get; set;} 
} 

public class MyRole 
{ 
    [DataMember] 
    public int ID {get; set;} 
    ... 
} 

매퍼 :

MyRole Mapper(EFRole role) 
{ 
    return new MyRole() { 
     id = role.id, ... 
    } 
} 

MyPerson Mapper(EFPerson person) 
{ 
    return new MyPerson() { 
     id = person.id, 
     .... 
     PersonRole = (person.Role != null ? Mapper(person.Role) : null; 
    } 
} 
+0

고마워요.하지만 응용 프로그램의 목적에 따라 "복잡합니다"(동일한 EF를 기반으로하는 "asmx"웹 서비스와 함께 EF를 기반로하는 WCF 데이터 서비스를 비교하는 테스트 일뿐입니다 ...) 나중에 시도 할 것입니다 ... –

1

것은 당신이 IEnumerable을 전달하고 있는가? 게으른 로딩을 멈추고 패스하려면 대신 .ToList()를 사용하십시오.

+0

지연로드가 비활성화되었습니다. toList를 사용하려고했지만 작동하지 않았습니다. 쿼리 결과를 확인하기 위해 디버그 모드에서 코드를 중지하면 올바른 결과를 얻을 수 있지만 웹 서비스에서 생성 된 반환 된 XML에는 중첩 된 객체에 대한 재연 만 포함됩니다. –

+0

더 많은 코드를 제공 할 수 있습니까? 어쩌면 웹 서비스 클래스 선언과 직렬화 코드일까요? –

0

역할 중첩 개체 또는 역할 필요 등록 정보를 포함하는 Person이라는 부분 클래스를 사용하십시오.

+0

좀 더 자세한 답변을 설명해 주시겠습니까? 아마도 몇 가지 예제 코드가 있습니다. – bish

관련 문제