Как я могу проверить в шаблоне T4, находится ли свойство навигации на основном конце - PullRequest
2 голосов
/ 16 февраля 2011

Я настраиваю шаблон T4, чтобы настроить автогенерацию. Как часть этого я должен найти способ, является ли данное свойство навигации объекта на главном конце.

Например, если у нас есть два предприятия, скажем, «Клиент» и «Телефон», и у меня отношение «1 ко многим» от клиента к телефону. Затем мне нужно проверить, находится ли сущность Customer на основном конце для отношения, в котором участвует свойство навигации "Телефоны".

Что такое соответствующие функции шаблона T4 для этого или как настроить это условие? Пожалуйста, помогите.

1 Ответ

2 голосов
/ 17 февраля 2011

Зависит от того, используете ли вы независимые реалии или отношения внешних ключей.

Для независимых отношений вы можете найти главный конец 1: N, проверив множественность.Я бы попробовал что-то вроде:

// 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)
      {
        ...
      }
    }

В случае отношений с внешним ключом вы можете использовать методы MetadataTools, который является классом, включенным в EF.Utility.CS.ttincludeОбычно устанавливается по адресу:

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

Один из методов GetPrincipalProperties(navProperty)

Оба подхода уже используются в шаблоне POCO T4.

...