2011-02-16 65 views
2

我正在調整T4模板以自定義我的自動生成。作爲其中的一部分,我需要找到一種方式,以確定實體的給定導航屬性是否處於主要目的。如何在T4模板中檢查導航屬性是否在主端

例如,如果我們有兩個實體,比如Customer和Phone,並且我有一個從Customer到Phone的一對多關係。然後,我需要檢查客戶實體是否處於導航屬性「電話」正在參與的關係的主體端。

什麼是相應的T4模板功能來做到這一點或如何設置這種情況?請幫忙。

回答

2

這取決於你是否使用獨立的realtions或外鍵關係。

對於獨立關係,您可以通過檢查多重性找到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模板中使用。

+0

感謝您的及時迴應。你是對的。這已經在t4中使用了。但是如果我們有1-1關係,這個邏輯將不起作用。說一個客戶最多隻能有一個電話,如果我在設置關係時將客戶作爲主體,那麼我們如何找到主體「客戶」。 – WPFProgrammer 2011-02-16 23:51:57