2016-12-21 1 views
1

У меня есть следующая таблица:шаблона Entity Framework 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), 
... 

Я использую EF Я хотел бы, чтобы сгенерировать навигационные свойства на основе внешних ключей, удаление Id, поэтому я хотел бы иметь навигационные свойства Phone и MobilePhone. Я пытался отлаживать, но я не нашел, где хранятся внешние ключи. Пожалуйста, помогите с шаблоном TT: где и какой shoult я изменяю.

ответ

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))); 
} 
Смежные вопросы