2011-07-29 5 views
2

WCF 서비스의 데이터 계약으로 Entity 클래스의 객체를 사용할 수 있습니까? 그래서 클라이언트 쪽에서 보낼 수 있습니다. 이 좋은 디자인 접근법인가?엔티티를 데이터 계약으로 사용할 수 있습니까?

DTO로도 사용할 엔터티 클래스가 필요하므로 데이터베이스에서 검색 한 데이터를 클라이언트로 보낼 수 있습니다.

답변

4

예입니다. EntityObject 기반 엔터티를 사용하는 경우 기본 코드 생성기와 T4 템플릿 모두 DataContractDataMember 특성으로 표시해야합니다. POCO를 사용하는 경우 템플릿을 수정하여 이러한 속성을 생성하거나 수동으로 POCO를 만들어야합니다.

이러한 특성을 사용해야하는 이유는 순환 참조에 문제가 있기 때문입니다. 기본적으로 EF는 관계의 양쪽에 탐색 속성을 만듭니다. 직렬화 중에 프레임 워크는 순환 참조에 대해 알아야 할 힌트가 필요합니다. 그렇지 않으면 무한 루프가됩니다. 엔터티가 [DataContract(IsReference=true)]으로 표시되어야하고 DataContract 특성을 사용한 후에는 DataMember을 사용하여 각 serialize 된 속성을 표시해야합니다.

직렬화가 모든 탐색 속성에서 지연로드를 트리거하고 지연된 모든 엔티티에서 반복적으로이를 수행하므로 지연로드를 끄는 것도 중요합니다. 따라서 단일 객체 대신에 모든 관계, 모든 관계 등을 서비스에서 반환 할 수 있습니다.

+0

감사합니다. Ladislav Mrnka. 나는 정말로 당신의 답을 고맙게 생각합니다. 이것을하는 방법을 보여줄 예제/튜토리얼이 있습니다. – Josh

관련 문제