我如何在T4模板中检查导航属性是否在主要端

时间:2011-02-16 20:02:48

标签: entity-framework templates c#-4.0 entity t4

我正在调整T4模板以自定义我的自动生成。作为其中的一部分,我需要找到一种方式,实体的给定导航属性是否在主要末端。

例如,如果我们有两个参与者,比如客户和电话,我有一个从客户到电话的一对多关系。然后,我需要检查客户实体是否在导航属性“电话”参与的关系的主要末端。

执行此操作的相应T4模板功能或如何设置此条件是什么?请帮忙。

1 个答案:

答案 0 :(得分:2)

这取决于您是使用独立实现还是外键关系。

对于独立关系,您可以通过检查多重性找到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模板中使用。