【问题标题】:SL4 / EF / RIA Services - Return parents, grand parents and great grandparents in one server hitSL4 / EF / RIA 服务 - 在一台服务器上返回父母、祖父母和曾祖父母
【发布时间】:2011-04-08 22:06:59
【问题描述】:

假设我在我的 EF 实体中设置了 Category > SubCategory > SubSubCategory > Item。

使用 WCF RIA 服务在对服务器的单个请求中获取 Category、Subcategory、SubSubCategory 和 Item where Item.Property = x all 的最佳方法是什么?

使用 .Include 我只能获取实体的子级,而不是孙级,并且进一步向下(或向上取决于您如何看待它)。

此外,如果我这样做......

 public IQueryable<ToolingTreeItem> GetTree(int currentLocationId)
    {
        var tree = from tc in this.ObjectContext.ToolingCategories
                   from tg in tc.ToolingGroups
                   from tt in tg.ToolingTypes
                   from t in tt.Toolings
                   where t.CurrentLocationId == currentLocationId
                   select new ToolingTreeItem { Cat = tc, Group = tg, Type = tt, Tool = t };

        return tree;
    }

...该方法在客户端项目的上下文中不可用,大概是因为我的自定义实体类 ToolingTreeItem 在 WCF RIA 服务的深渊之谜的某处未被识别。

如果现在还不明显,我要做的就是在对服务器的一次调用中使用 Category > SubCategory > SubSubCategory > Item 填充我的 TreeView。最好的方法是什么?

许多快乐的回报!

【问题讨论】:

  • 你能发布 ToolingTreeItem 类的定义,你使用了什么属性? RIA 需要序列化成员的 [Serializable] 属性和 [DataMember]。
  • 如果从底层开始查询呢: ObjectContext.Toolings.Include("ToolingType.ToolingGroup.ToolingCategory").Where(t => t.CurrentLocationId == currentLocationId).ToList();

标签: silverlight entity-framework wcf-ria-services


【解决方案1】:

您应该能够使用预先加载来加载实体。 假设您将“[Include]”添加到元数据中的“父”属性,类似于下面的代码应该可以工作(请注意,我已经猜到所有关系的名称,因此您可能需要编辑代码)

public IQueryable<Toolings> GetToolsWithTree(int currentLocationId) 
{ 
    var tree = from t in this.ObjectContext.Tooling.Include("ToolingType.ToolingGroup.ToolingCategory")
               where t.CurrentLocationId == currentLocationId
               select t; 

    return tree; 
} 

【讨论】:

    【解决方案2】:

    看起来 ToolingTreeItem 是一个复杂的对象,而不是一个实体。不幸的是,RIA 服务无法在客户端生成混合了复杂对象和实体的类——该类必须完全是其中的一个。我知道的两个解决方案是通过将 Key 属性放在属性上来使 ToolingTreeItem 成为“实体”,或者只是对数据发出多个请求。我还发现这是一个真正的限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      相关资源
      最近更新 更多