SL4 / EF / RIA服务 - 在一台服务器中返回父母,祖父母和曾祖父母

时间:2011-04-08 22:06:59

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

假设我有分类>子类别> SubSubCategory>在我的EF实体中设置的项目。

使用WCF RIA服务在一个单一的服务请求中获取Category,Subcubory,SubSubCategory和Item的最佳方法是什么?

使用.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 Services的深层秘密的某个地方无法识别。

如果现在不明显,我想要做的就是使用Category&gt;填充我的TreeView。子类别&gt; SubSubCategory&gt;项目在一次调用服务器。什么是最好的方法?

许多快乐的回报!

2 个答案:

答案 0 :(得分: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; 
} 

答案 1 :(得分:0)

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