如何强制RIA Services将子实体包含在一个Query方法中,而不包含在另一个Query方法中

Ram*_*ses 5 nhibernate wcf-ria-services

这是场景:

我在"Groups"和"Users"之间建立了一个关联,由"UserGroupAssignment"对象表示.

public class UserGroupAssignment
{
  [Key]
  public virtual long Id { get; set; }

  [Association("UserAssignmentToUser", "UserId", "Id", IsForeignKey = true)]
  public virtual User { get; set; }  

  [Association("UserAssignmentToGroup", "GroupId", "Id", IsForeignKey = true)]
  public virtual Group { get; set; }    

  public virtual bool IsPrimary { get; set; }    

  public virtual DateTime? ValidFrom { get; set; }    

  public virtual DateTime? ValidTo { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

我有两个业务逻辑方法,GetUserAssignmentsForGroups和GetGroupAssignmentsForUsers,我返回分配,分别填充用户和组属性.即GetUserAssignmentsForGroup接受GroupId并返回该组的分配,并填充User属性.

我想要的是将这两个方法公开为域查询方法,如下所示:

[Query]
public IQueryable<UserGroupAssignment> GetAssignmentsForGroupWithUsers(long groupId)
{
  return this.businessLogic.GetUserAssignmentsForGroups(groupId);
}

[Query]
public IQueryable<UserGroupAssignment> GetAssignmentsForUserWithGroups(long userId)
{
  return this.businessLogic.GetGroupAssignmentsForUsers(userId)
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当业务逻辑方法通过NHibernate返回正确填充的Assignments时,RIA Services不会通过网络传递子实体(用户或组).

我不想在UserAssignment类的User或Group属性上使用[Include]属性,因为我想通过线路最小化有效负载 - 当我只对我感兴趣时,我不想发送组例如,每个UserAssignment的用户.

所以我的问题是:

如何告诉RIA服务在一个域查询方法中明确包含用户子实体,在另一个域实体中明确包含子子实体?

请记住,我在后端使用NHibernate并在RIA Services中使用自定义查询方法,因此无法在客户端查询中使用EF样式包含.

谢谢

乔尔

Yeo*_*nho 1

[Include]您应该在元数据类中应用该属性。然后创建一个域服务方法来获取包含属性的数据,以及一个单独的方法来获取包含属性的数据。

您可能会发现此线程有助于理解[Include]属性的工作原理。