2011-06-09 91 views
2

我有包含3個表 - 演員,電影,Actors_Films的數據庫。其中2個表格具有多對多關係(Actors和Films),它們使用聯結表(Actors_Films)建模。實體框架4從數據源丟失的導航屬性

我在Silverlight應用程序中使用EF4。我創建了一個EF模型,edmx設計器只顯示了我的Acctors和Films實體,但它們每個都有一個導航屬性給另一個實體(Actor具有Films的導航屬性,Films具有Actor的導航屬性) 。

我已經添加了一個域服務,並構建了該項目。以演員爲例我現在想添加一個包含數據表的視圖,這個數據表可以讓我在Actors中循環,還有一個數據網格,它將顯示當前選中的演員出現的任何電影。但是,在數據源選項卡中,我有包含2個實體的域上下文 - Actor和Films。這2個實體只顯示自己的實際列,導航性能沒有出現:

演員 --- actorId來 --- ActorName

電影 --- FilmID --- FilmTitle

這是正確的嗎?我認爲導航屬性應該顯示出來。

我的實際應用比這個更復雜,但這只是一個簡單的例子,只關注實際問題。

感謝

米克

回答

1

WCF RIA服務不支持多對多關係。您必須在edmx上有關聯表。爲了使Navigate屬性出現在客戶端上,您必須添加[Include]屬性以在實體的適當元數據中導航屬性。元數據通常在您創建任何DomainService時生成。例如,我們有許多ContractPosition和OrderPosition關係:

//ContractPositionsService.metadata.cs 
[MetadataTypeAttribute(typeof(ContractPosition.ContractPositionMetadata))] 
public partial class ContractPosition 
{ 
    internal sealed class ContractPositionMetadata 
    { 
     public int ContractPositionId { get; set; } 
     [Include] 
     public EntityCollection<ContractToOrderLink> ContractToOrderLinks { get; set; } 

     ... 
    } 
//ContractToOrdersLinksService.metadata.cs 
[MetadataTypeAttribute(typeof(ContractToOrderLink.ContractToOrderLinkMetadata))] 
public partial class ContractToOrderLink 
{ 

    internal sealed class ContractToOrderLinkMetadata 
    { 
     [Include] 
     public ContractPosition ContractPosition { get; set; } 

     public int ContractPositionId { get; set; } 

     [Include] 
     public OrderPosition OrderPosition { get; set; } 

     public int OrderPositionId { get; set; }    
    } 
} 


//OrderPositionsService.metadata.cs 
[MetadataTypeAttribute(typeof(OrderPosition.OrderPositionMetadata))] 
public partial class OrderPosition 
{    
    internal sealed class OrderPositionMetadata 
    { 
     public int OrderPositionId { get; set; }   

     [Include] 
     public EntityCollection<ContractToOrderLink> ContractToOrderLinks { get; set; } 

     ... 
    } 
} 
+0

感謝MaxWave。這回答了我的問題。 – MJM 2011-06-09 09:29:05