我正在调整T4模板以自定义我的自动生成。作为其中的一部分,我需要找到一种方式,实体的给定导航属性是否在主要末端。
例如,如果我们有两个参与者,比如客户和电话,我有一个从客户到电话的一对多关系。然后,我需要检查客户实体是否在导航属性“电话”参与的关系的主要末端。
执行此操作的相应T4模板功能或如何设置此条件是什么?请帮忙。
答案 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模板中使用。