【问题标题】:Entity Framework 4 Navigation properties missing from Data Sources数据源中缺少实体框架 4 导航属性
【发布时间】:2011-09-11 10:39:08
【问题描述】:

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

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

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

演员 ---演员ID ---演员名

电影 ---电影ID ---片名

这是正确的吗?我认为应该显示导航属性。

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

谢谢

米克

【问题讨论】:

    标签: silverlight entity-framework-4 junction-table


    【解决方案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; }
    
            ...
        }
    }
    

    【讨论】:

    • 感谢 MaxWave。这回答了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多