C#如何在RIA域服务中处理n:m关联中的导航属性?
在Silverlight5/RIA Services应用程序中,我在一个非常简单的数据库上构建了一个域服务: 预订n:1设备1:n组设备n:1组 在我的自动生成的edmx中,永远不会显示GroupToEquipment实体,并且会显示直接从设备到组的n:m关联。到目前为止还不错 为了在我的DomainService中获得设备对1:n关联预订的引用,我必须在“DomainService.metadata.cs”中插入[Include]和[Association…]C#如何在RIA域服务中处理n:m关联中的导航属性?,c#,silverlight,associations,wcf-ria-services,domainservices,C#,Silverlight,Associations,Wcf Ria Services,Domainservices,在Silverlight5/RIA Services应用程序中,我在一个非常简单的数据库上构建了一个域服务: 预订n:1设备1:n组设备n:1组 在我的自动生成的edmx中,永远不会显示GroupToEquipment实体,并且会显示直接从设备到组的n:m关联。到目前为止还不错 为了在我的DomainService中获得设备对1:n关联预订的引用,我必须在“DomainService.metadata.cs”中插入[Include]和[Association…] [包括] [协会(“FK\U预订
[包括]
[协会(“FK\U预订设备”、“设备ID”、“设备ID”)]
公共实体集合预订{get;set;}
并在“DomainService.cs”中添加了一个.Include(“预订”)
public IQueryable GetEquipment()
{
返回此.ObjectContext.device.Include(“预订”);
}
这非常有效,查询设备时会加载所有预订的参考!但是我怎么才能在n:m集团协会中采用这个呢
下面的代码是我随后在“DomainService.metadata.cs”中另外尝试的代码:
内部密封类设备元数据
{
//元数据类并不意味着要实例化。
专用设备元数据()
{
}
[包括]
[协会(“FK\U预订设备”、“设备ID”、“设备ID”)]
公共实体集合预订{get;set;}
公共Guid设备ID{get;set;}
[包括]
[协会(“GroupToEquipment”、“EquipmentId”、“GroupId”)]
公共EntityCollection组{get;set;}
公共字符串名称{get;set;}
}
}
在域名服务中:
public IQueryable<Equipment> GetEquipment()
{
return this.ObjectContext.Equipment.Include("Booking").Include("Group");
}
public IQueryable GetEquipment()
{
返回此.ObjectContext.Equipment.Include(“预订”).Include(“集团”);
}
代码编译良好,但在查询设备后没有对组的引用…:-(
我做错了什么?我敢肯定这对知道
致以最良好的祝愿,
Flo.很抱歉,WCF Ria不支持m:n关系!请参阅更多信息中的Nikhil kotary回答 我建议您创建一个m:n类并手动处理该关系,换句话说,您必须将GroupToEquipment实体从db公开给edmx,从edmx公开给WCF Ria 如果不能忍受这个选项,并且更喜欢添加对其他代码的依赖,请看一看,我已经在非常基本的场景中尝试过了,并且成功了 希望这有帮助,
马可你找到预订的参考资料了吗?我试着做两件事:1)运行Fiddle2,查看WCF Silverlight下返回的内容2)删除[Association]-我从来不需要包括预订参考资料。如果我删除[Association],编译将失败……感谢您提供的信息。同时,我在解决方案的服务器端进行了所需的增强,并通过域服务发送过滤结果集。
public IQueryable<Equipment> GetEquipment()
{
return this.ObjectContext.Equipment.Include("Booking");
}
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; }
}
}
public IQueryable<Equipment> GetEquipment()
{
return this.ObjectContext.Equipment.Include("Booking").Include("Group");
}