2016-12-21 5 views
1

나는 다음과 같은 테이블이 : 나는 EF를 사용하고는 I가 제거, 외부 키를 기반으로 탐색 속성을 생성하고자하는엔티티 프레임 워크 TT 템플릿 -> 외래 키 ID를 기반으로 탐색 속성 이름

CREATE TABLE Phone(
PhoneId INT IDENTITY (1, 1) NOT NULL, 
CONSTRAINT PK_Phone PRIMARY KEY CLUSTERED (PhoneId ASC)) 

CREATE TABLE Person(
PersonId INT IDENTITY (1, 1) NOT NULL, 
MobilePhoneId INT NOT NULL, 
PhoneId INT NOT NULL, 
... 

CONSTRAINT PK_Person PRIMARY KEY CLUSTERED (PersonId ASC), 
CONSTRAINT FK_Projects_Phone FOREIGN KEY (PhoneId) 
    REFERENCES Phone(PhoneId), 
CONSTRAINT FK_Projects_MobileId FOREIGN KEY (MobilePhoneId) 
    REFERENCES Phone(PhoneId), 
... 

을 ID 부분이므로 탐색 속성 인 Phone and MobilePhone을 갖고 싶습니다. 나는 디버깅을 시도했지만 외래 키가 어디에 저장되어 있는지 찾지 못했습니다. TT 템플릿을 도와주십시오.

답변

0

디자이너의 edmx를 편집하거나 T4 템플릿을 편집하여이 작업을 수행 할 수 있습니다. 당신은 T4 템플릿을 편집 할 때 (모델을 .TT 파일)이 수정하려고이 방법으로

public string NavigationProperty(NavigationProperty navProp) 
{ 
    var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType()); 
    return string.Format(
     CultureInfo.InvariantCulture, 
     "{0} {1} {2} {{ {3}get; {4}set; }}", 
     AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)), 
     navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType, 
     _code.Escape(navProp), 
     _code.SpaceAfter(Accessibility.ForGetter(navProp)), 
     _code.SpaceAfter(Accessibility.ForSetter(navProp))); 
} 

:

public string NavigationProperty(NavigationProperty navProp) 
{ 
    var navigationPropertyName = _code.Escape(navProp); 
    var match = System.Text.RegularExpressions.Regex.Match(navigationPropertyName, "^(?<a>.+)Id$"); 
    if(match.Success) 
     navigationPropertyName = match.Groups[1].Value; 

    var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType()); 
    return string.Format(
     CultureInfo.InvariantCulture, 
     "{0} {1} {2} {{ {3}get; {4}set; }}", 
     AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)), 
     navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType, 
     navigationPropertyName, 
     _code.SpaceAfter(Accessibility.ForGetter(navProp)), 
     _code.SpaceAfter(Accessibility.ForSetter(navProp))); 
}