我的DB包含3个表 - Actors,Films,Actors_Films。其中2个表具有多对多关系(Actors和Films),使用联结表(Actors_Films)建模。
我在Silverlight应用中使用EF4。我创建了一个EF模型,edmx设计器只显示我的Ac tors和Films实体,但它们每个都有一个导航属性到另一个实体(Actors有导航属性Films,而Films有导航属性Actors)
我添加了域名服务,并构建了该项目。以Actors为例我现在想要添加一个视图,其中包含一个允许我在Actors中循环的数据形式,以及一个数据网格,它将显示当前所选actor出现的任何影片。但是,在数据源选项卡中,我有包含2个实体的域上下文 - 演员和电影。这两个实体仅显示其实际列,导航属性未显示:
演员 --- actorId来 --- ActorName
薄膜 --- FilmID --- FilmTitle
这是对的吗?我认为应该显示导航属性。
我的实际应用程序比这更复杂,但这是一个简单的例子,只关注实际问题。
由于
米克
答案 0 :(得分:1)
WCF Ria服务不支持多对多关系。您必须在edmx上有关联表。为了使Navigate属性出现在客户端上,您必须添加[Include]属性以在Entity的适当元数据中导航属性。通常在创建任何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; }
...
}
}