2010-03-03 2 views
0

WCF 서비스를 가리키는 서비스 참조가 있습니다.이 서비스 참조는 데이터 액세스 논리가 처리되는 모델 계층의 프록시 역할을합니다. 후드 아래에서 ORM으로 Linq2Sql을 사용하여 데이터베이스 통신을 용이하게합니다.서비스 참조를 통해 일련의 속성 제어

생성 된 클래스를 데이터 액세스 레이어로 사용하지만 실제로 반환되는 것은 바보 DTO 개체이며 그 다음 POCO가 아닙니다. 두 가지 작업을 수행하고 싶습니다.)

1) 서비스 참조를 통해 사용자 정의 유형 및 관련 속성에 대해 클라이언트에서 사용할 수있는 항목을 제어합니다. 이것은 클래스의 크기를 줄이기위한 것입니다.

2) 실제로 Linq2Sql이 생성 된 모든 클래스를 꾸미고 있지만이 클래스가 서비스 참조를 통해 내려 오는 것을 원하지 않습니다.

현재 클래스를 입력 매개 변수의 반환 유형으로 사용하면 직렬화됩니다. 이 속성은 사용할 수있는 속성을 제한하고 싶을뿐입니다.

생각 하시겠습니까?

답변

0

그래서 이것을 알아 냈습니다. 기본적으로 서비스 참조를 만들 때 어떤 식 으로든 사용되는 유형 만 직렬화됩니다. 기본적으로 DataContract가 없으면 모든 것이 직렬화됩니다.

DataContract가있는 경우 DataMember 데코 레이팅 된 속성을 찾고 해당 속성 만 serialize합니다. Tricky

+0

까다 롭지 않은 - 문서화! :-) 그래서 나는 ** 항상 ** 명시 적으로 [DataContract]와 [DataMember]를 DTO에서 사용하도록 옹호합니다. 이렇게하면 좀 더 일을 시작할 수 있습니다.하지만 직렬화되는 내용과 건너 뛴 내용에 대해 명확하고 분명합니다. 그 여분의 작업은 유지 보수 모드에서 나중에 지불하게됩니다 - 여러 번! –

+0

나는 동의한다, 나는 단지 그것을 깨달았다, 내가 실제로 문서화에 가고 있었던 것에 따라 대답하기 위해왔다 :) 우스운 방법 그것이 작동한다. Hal이 말했듯이 생성 된 클래스는 추상화되어 반환 값으로 사용되지 않습니다. – xximjasonxx

0

당신은 Linq에서 SQL 오브젝트로 추상화 된 서비스 경계를 ​​통과하고 싶습니다. 맞습니까?

그렇다면 DTO를 정의하고 (많은 개체를 가지고 있다면 좋은 T4 템플릿을 작성하거나 찾은 다음) AutoMapper를 사용하여 DTO와 Linq to SQL 개체간에 앞뒤로 이동하는 것이 좋습니다. .

+0

이미 모든 DTO가 정의되어 있습니다. Linq2Sql에서 생성 된 클래스의 사용법 (정적 컨텍스트는 제외)은 너무 무거워서 JSON 직렬 변환기에 문제가 있기 때문에 추상화를 위해 노력했습니다. – xximjasonxx

관련 문제