假设我有分类>子类别> 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;项目在一次调用服务器。什么是最好的方法?
许多快乐的回报!
答案 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成为一个“实体”,或者只是对数据发出几个请求。我也发现这是一个真正的限制。