2016-12-21 1 views
1

Ich habe die folgende Tabelle:Entity Framework TT-Vorlage -> Navigation anzeigen Name basierend auf Fremdschlüssel 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), 
... 

Ich bin mit EF einem Ich mag Navigationseigenschaften erzeugen, basierend auf dem Fremdschlüssel, die Entfernung Id teil, also hätte ich gerne die Navigationseigenschaften Phone und MobilePhone. Ich habe versucht zu debuggen, aber ich habe nicht gefunden, wo die Fremdschlüssel gespeichert sind. Bitte helfen Sie mit der TT-Vorlage: wo und was soll ich ändern.

Antwort

0

Sie können es tun, edmx im Designer bearbeiten oder T4-Vorlage bearbeiten. Wenn Sie möchten, T4-Vorlage (Modell .TT-Datei) bearbeiten versuchen, dies zu ändern:

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))); 
} 

auf diese Weise:

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))); 
} 
Verwandte Themen