这是实体框架:
var department = _context.Departments
.Include(dep => dep.Employees.Select(emp => emp.ContactTypes))
.SingleOrDefault(d => d.Id == departmentId);
在这里,我希望返回一个部门,其中包含所有相关员工以及每位员工的所有联系类型。
这是ormlite servicestack:
我不知道。当我查看纪录片/样本时:https://github.com/ServiceStack/ServiceStack.OrmLite
他们写道:
现在,Expression支持可以使用强类型API来满足大多数简单查询。对于任何更复杂的事情(例如,使用表连接的查询),您仍然可以轻松地回退到原始SQL查询,如下所示。
我看到有一个JoinSqlBuilder类,但我认为它不能返回嵌套集合。
也许我想要的是不可能的,但也许我可以做一个妥协,比如让所有员工都参加部门会议。然后我记忆员工并获取某个employeeId的所有联系人类型。创建层次结构并分配列表仍然是我的工作。
但我希望有一个更短的解决方案。
什么也没关系,但查询可能看起来像是返回一个具有3个平面属性的对象(动态?):Department,Employees,ContactTypes并为我的DTO分配thoese属性。
答案 0 :(得分:0)
好的,请不要把它当作一个明确的答案,但更多的是我对这种情况的看法(我不会非常使用服务堆栈)但是......
当我多年前第一次开始使用EF时,我遇到了类似的情况,其中引用不会加载。和你一样,我面临着自己必须枚举个别收藏的可能性,并为ORM应该能够轻松处理的操作编写了大量额外的代码。
我最终做的是使用自动映射器,它基本上将我到处的所有多行循环减少到单行映射语句。
当然,我仍然必须为每个链接属性执行一个映射语句,但它减少了我必须编写的代码,更重要的是让我启动并运行直到EF改进,或者我找到了更好的处理方式。
让我强调一下,我并不是在提出这个答案,而且评论有点大,我只是建议将你的想法转向另一个方向,这可能有助于更好的解决方案浮出水面。