2011-02-16 6 views
2

내 자동 생성을 사용자 정의하기 위해 T4 템플릿을 조정 중입니다. 이 일환으로 엔티티의 특정 탐색 속성이 주된 목적인지 여부를 찾는 방법이 필요합니다.내비게이션 속성이 주말에 있는지 여부를 T4 템플릿에서 확인할 수있는 방법

예를 들어, 우리가 두 개의 엔테이트가 있다면 고객과 전화라고 말하면 고객과 전화의 관계는 1 대 1입니다. 그런 다음 Customer 엔터티가 탐색 속성 "전화"가 참여하는 관계에 대한 주요 끝점에 있는지 확인해야합니다.

이 작업을 수행하는 해당 T4 템플릿 함수 또는이 조건을 설정하는 방법은 무엇입니까? 도와주세요.

답변

2

독립적 인 realtions 또는 외래 키 관계를 사용하는지 여부에 따라 다릅니다.

독립적 인 관계의 경우 다중성을 검사하여 1 : N의 주 끝을 찾을 수 있습니다. 당신이 EF.Utility.CS.ttinclude에서 포함 된 클래스입니다 MetadataTools의 방법을 사용할 수 있습니다 외래 키 관계의 경우

// check each navigation property 
foreach (var navProperty in entity.NavigationProperties) 
{ 
    // use only properties where one end has * an second end has 1 or 0..1 multiplicity 
    // Not sure if the condition should not be reversed 
    if(navProperty.ToEndMember.RelaltionshipMultiplicity == 
     RelationshipMultiplicity.Many && 
    navProperty.FromEndMember.RelationshipMultiplicity != 
     RelationshipMultiplicity.Many) 
     { 
     ... 
     } 
    } 

: 내가 좋아하는 뭔가를 시도 할 것입니다. 방법의

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes 

하나는 두 가지 접근법이 이미 POCO T4 템플릿에 사용되는 GetPrincipalProperties(navProperty)

입니다 : 일반적으로 설치.

+0

신속한 답변을 보내 주셔서 감사합니다. 그래 네가 맞아. 이것은 t4에서 이미 사용되었습니다. 그러나 우리가 1-1 관계를 가지고 있다면이 논리는 작동하지 않을 것입니다. 고객이 최소한 최대 1 대의 전화를 가질 수 있다고 가정 해 봅시다. 관계를 설정하는 동안 Customer를 principal로 설정하면 주체 "Customer"를 어떻게 찾을 수 있는지 말하십시오. – WPFProgrammer

+0

이 함수 "IsPrincipalEndOfIdentifyingRelationship (AssociationEndMember associationEnd)"을 사용할 수 있지만 탐색 속성이 있으면 매개 변수로 전달할 항목을 알 수 없습니다. – WPFProgrammer

+0

@WPFProgrammer : 해당 기능이 도움이되지 않습니다. 식별 관계는 종속 엔터티가 FK와 주요 엔터티가 포함 된 복잡한 키를 가지고있는 외래 키 관계의 매우 특별한 유형입니다. FK가 포함 된 측면에 대한 정보가 메타 데이터에 없기 때문에 1 : 1 독립 관계가있는 주체를 찾을 수 있는지 확신 할 수 없습니다. 이 경우 정보를 포함 시키려면 모든 관계를 외래 키 관계로 변환해야합니다. –

관련 문제