【问题标题】:C# How to handle Navigation properties in n:m association in RIA Domain Service?C# 如何处理 RIA 域服务中 n:m 关联中的导航属性?
【发布时间】:2012-09-25 13:29:18
【问题描述】:

在 Silverlight5 / RIA 服务应用程序中,我在一个非常简单的数据库上构建了域服务:

预订 n:1 设备 1:n GroupToEquipment n:1 组

在我自动生成的 edmx 中,GroupToEquipment 实体永远不会出现,并且会显示直接从 Equipment 到 Group 的 n:m 关联。到目前为止一切顺利。

为了让设备引用我的 DomainService 中的 1:n 关联预订,我必须在“DomainService.metadata.cs”中插入 [Include] 和 [Association...]

[Include]
[Association("FK_Booking_Equipment", "EquipmentId","EquipmentId")]
public EntityCollection<Booking> Booking { get; set; }

并在“DomainService.cs”中添加了一个 .Include("Booking")

public IQueryable<Equipment> GetEquipment()
{
   return this.ObjectContext.Equipment.Include("Booking");
}

这很完美,并且在查询设备时会加载对所有预订的引用!但是我如何必须为 n:m Group-association 采用这个?

以下代码是我在“DomainService.metadata.cs”中另外尝试的:

    internal sealed class EquipmentMetadata
    {

        // Metadata classes are not meant to be instantiated.
        private EquipmentMetadata()
        {
        }

        [Include]
        [Association("FK_Booking_Equipment", "EquipmentId","EquipmentId")]
        public EntityCollection<Booking> Booking { get; set; }

        public Guid EquipmentId { get; set; }

        [Include]
        [Association("GroupToEquipment", "EquipmentId", "GroupId")]
        public EntityCollection<Group> Group { get; set; }

        public string Name { get; set; }
    }
}

这在 DomainService 中:

    public IQueryable<Equipment> GetEquipment()
    {
        return this.ObjectContext.Equipment.Include("Booking").Include("Group");
    }

代码编译正常,但查询设备后没有对组的引用...... :-(

我做错了什么?很确定这对于知道的人来说只是一个小问题......

最好的问候, 弗洛。

【问题讨论】:

  • 您是否收到了对 Bookings 的引用?我会尝试两件事:1) 运行 Fiddler2 并查看 WCF Silverlight 下返回的内容 2) 删除 [Association] - 我从来不需要包含它
  • 包括预订参考。如果我删除 [Association] 编译失败....

标签: c# silverlight associations wcf-ria-services domainservices


【解决方案1】:

很抱歉,WCF Ria 不支持 m:n 关系!请参阅this Nikhil kotary 的更多信息回答

我建议您创建一个 m:n 类并手动处理关系,换句话说,您必须将 GroupToEquipment 实体从 db 公开到 edmx,从 edmx 公开到 WCF Ria。

如果不能忍受这个选项,并且更喜欢添加对其他代码的依赖,请查看m2mria on codeplex,我已经在非常基本的场景中尝试过它并且它有效

希望这会有所帮助,
马可

【讨论】:

  • 感谢您提供的信息。同时,我在解决方案的服务器端进行了我想要的增强,并通过域服务发送过滤的结果集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多