2010-06-09 3 views
1

버디 클래스는 데이터 주석 또는 모든 속성에 대해서만 작동합니까? 내 친구 클래스의 필드에 ColumnAttribute을 첨부하려고 시도했지만 원래 클래스에서 처리되지 않는 것으로 보입니다. 두 클래스는 MetadataType을 통해 링크됩니다.버디 클래스는 DataAnnotations에서만 작동합니까?

답변

0

내 답변은 DataAnnotations에만 해당되는 것이 아니며 유형 설명자를 연결하는 방법에 대한 답변입니다.

클래스의 관계를 설명하는 TypeDescriptionProvider의 하위 클래스를 만듭니다 (일부 경우에는 AssociatedMetadataTypeTypeDescriptionProvider과 같은 기존 설명자를 사용할 수있는 경우도 있습니다).

그런 다음 TypeDescriptor.AddProvider 또는 TypeDescriptor.AddProviderTransparent을 사용하여 런타임에 동적으로 연결하십시오.

제안 사항에는 플래그가 지정된 유형의 목록이있는 서비스가 있으며 필요에 따라 모든 유형을 실행하여 성능 비용이 응용 프로그램 실행 시간에 분산되므로 유형이 처리 될 때 목록에 유형을 입력하고 다음에이 유형이 요청하면 목록에 있음을 알 수 있습니다.

0

버디 클래스 기술은 DataAnnotations에 특별한 것이 아닙니다. 그러나 사용중인 리플렉션 코드가 MetadataType 특성을 사용하여 작동하는 경우에만 작동합니다. ASP.NET MVC는 버디 클래스 개념을 처리하는 코드베이스의 예입니다. Linq-to-SQL은 그렇지 않습니다. 따라서 친구 클래스를 사용하여 ColumnAttribute을 추가하려는 경우 현재 막혔습니다. 그러나, 당신이 정말로 좋아할 필요가 있다면 Linq-to-SQL은 속성을 사용하는 대신 매핑을 사용하여 XML 문서를 가져옵니다. 이 클래스를 사용하여 버디 클래스를 사용했을 수도있는 인스턴스의 대안으로 매핑을 만들 수 있습니다.

당신이 정말 멋지게 되려면 친구 클래스를 만들고 Linq 속성 데코레이션 클래스에 대한 자신 만의 버디 클래스 인식 리플렉션 핸들러를 작성하고 DataContext 필요에 맞게 XML 매핑 문서를 구성하십시오 . 아마 50 줄 미만의 코드에서 그렇게 할 수있을 것입니다.

관련 문제