使用 ormlite servicestack 加载
Posted
技术标签:
【中文标题】使用 ormlite servicestack 加载【英文标题】:Eager loading with ormlite servicestack 【发布时间】:2014-01-05 21:52:53 【问题描述】:这是实体框架:
var department = _context.Departments
.Include(dep => dep.Employees.Select(emp => emp.ContactTypes))
.SingleOrDefault(d => d.Id == departmentId);
在这里,我希望返回一个部门,其中包含所有相关员工以及每位员工的所有联系人类型。
这是 ormlite 服务栈:
我不知道。当我查看文档/样本时:https://github.com/ServiceStack/ServiceStack.OrmLite
他们写道:
目前,表达式支持可以通过强类型 API 满足大多数简单查询。对于更复杂的事情(例如,使用表连接的查询),您仍然可以轻松地回退到原始 SQL 查询,如下所示。
我看到有一个 JoinSqlBuilder 类,但我认为它不能返回嵌套集合。
也许我想要的东西是不可能的,但也许我可以做一个妥协,比如让所有员工都获得部门 ID。然后我在内存中查找员工并获取某个员工 ID 的所有联系人类型。创建层次结构和分配列表仍然是我的工作。
但我希望有一个更短的解决方案。
当查询返回一个具有 3 个平面属性的对象(动态?)时,也可以这样做:Department、Employees、ContactTypes 并将这些属性分配给我的 DTO。
【问题讨论】:
@Voters 你们所有人都应该去:servicestack.uservoice.com/forums/176786-feature-requests/… 并在那里投票,您最多可以投 3 票,而不是我们可以超过最高功能要求!!! @Voters Cool 有些人已经投票了:p 如果你现在检查代码,他们有加载引用和保存引用,但我从不使用它,因为它是版本 4 的功能 LoadReference 只是在我的场景中加载员工,而不是联系人类型......它是第一级的简单 ById 获取。 【参考方案1】:好的,请不要将此作为确定的答案,但更多的是我对这种情况的看法(我不太使用服务堆栈)......
当我多年前第一次开始使用 EF 时,我遇到了类似的情况,即无法加载引用。像你一样,我面临着不得不自己枚举各个集合并为 ORM 应该能够轻松处理的操作编写大量额外代码的问题。
我最终做的是使用自动映射器,它基本上将我随处可见的所有多行循环减少为单行映射语句。
当然,我仍然需要为每个链接的属性执行一个映射语句,但它减少了我必须编写的代码,更重要的是让我启动并运行,直到 EF 得到改进,或者我找到了更好的做事方式。
让我强调一下,我并不是建议将其作为答案,而且评论有点大,我只是建议将您的想法转向不同的方向,这可能有助于更好的解决方案浮出水面。
【讨论】:
以上是关于使用 ormlite servicestack 加载的主要内容,如果未能解决你的问题,请参考以下文章
ServiceStack Webhook + ServiceStack.Webhooks.OrmLite 订阅商店插件问题
如何修改 ServiceStack.OrmLite 生成的 SQL?
在 SQL Server 和 ServiceStack.OrmLite 中使用架构名称