2

我有包含 3 个表的数据库 - Actors、Films、Actors_Films。其中 2 个表具有多对多关系(Actors 和 Films),使用联结表(Actors_Films)建模。

我在 Silverlight 应用程序中使用 EF4。我创建了一个 EF 模型,edmx 设计器只显示了我的 Actors 和 Films 实体,但它们每个都有一个到另一个实体的导航属性(Actors 有一个 Films 的导航属性,而 Films 有一个 Actors 的导航属性) .

我添加了一个域服务,并构建了项目。以演员为例,我现在想添加一个视图,该视图包含一个数据表单,可以让我在演员之间循环,还有一个数据网格,可以显示当前所选演员出现的任何电影。但是,在数据源选项卡中,我有包含 2 个实体的域上下文 - 演员和电影。这两个实体只显示它们的实际列,导航属性没有出现:

演员 ---ActorID ---ActorName

电影 ---FilmID ---FilmTitle

它是否正确?我认为应该显示导航属性。

我的实际应用程序比这更复杂,但这是一个简化的示例,只是为了关注实际问题。

谢谢

米克

4

1 回答 1

1

WCF Ria 服务不支持多对多关系。您必须在 edmx 上有关联表。为了使导航属性出现在客户端上,您必须添加 [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; }

        ...
    }
}
于 2011-06-09T09:07:58.007 回答